#flutter #google-cloud-firestore #stream
#flutter #google-облако-firestore #поток
Вопрос:
Я ищу способ получить поток документов по другому потоку идентификаторов, допустим, у меня есть поток идентификаторов документов, например, Stream<List<String>> docIds = ['3dd34334, '45454de', ...]
тогда мне нужно запросить другую коллекцию, используя идентификаторы, которые у меня уже есть, пожалуйста, найдите мой код ниже, который возвращает пустой поток.
Stream<List<ViewModel>> matches(uid) async {
Stream<List<String>> docIds = FirebaseFirestore.instance
.collection('matches')
.where('match', arrayContains: uid)
.snapshots()
.map((event) => event.docs.map((e) => e.id).toList());
return docIds.map((e) {
e.map((e) => FirebaseFirestore.instance
.collection('matches')
.doc(e)
.collection("myCollection")
.snapshots()
.map(
(event) => event.docs.map((e) => ViewModel.fromJson(e.data())).toList(),
));
}).toList();
}
Ответ №1:
вы можете создавать потоки несколькими способами,
Используя базовый пример yield:
Stream<List<int>> countStream(int to) async* {
for (int i = 1; i <= to; i ) {
List<int> list = List<int>();
yield list;
}
}
Теперь с firebase firestore и преобразованием потока:
Stream<List<ViewModel>> matches(uid) async* {
Stream<List<String>> docIds = FirebaseFirestore.instance
.collection('matches')
.where('match', arrayContains: uid)
.snapshots()
.map((event) => event.docs.map((e) => e.id).toList());
await for (List<ViewModel> chunk in source) {
// Do other operations if you need
yield chunk
}
}
Комментарии:
1. у меня не получилось, не могли бы вы подробнее объяснить свой ответ, также, пожалуйста, используйте практический пример
2. Какая часть у вас не работает? У вас есть сообщение об ошибке? С моей стороны неясно, какие базовые данные в Firestore у вас есть или каково содержимое промежуточных переменных.