Flutter Получает поток документов Firestore по списку идентификаторов

#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 у вас есть или каково содержимое промежуточных переменных.