Dart

# #flutter #dart #google-cloud-firestore #dart-stream

Вопрос:

Для того, кто понимает потоки в Dart, это, скорее всего, тривиально. У меня есть список connections , которые являются просто идентификаторами документов, которые существуют в одной коллекции в firestore.

Я не могу использовать whereIn для своего запроса firestore, потому что он ограничен 10 элементами. Итак, я пытаюсь перебрать идентификатор каждого соединения, а затем использовать поток сбора с запросом, чтобы получать по одному документу за раз.

Приведенный ниже код не работает. Он возвращает эту ошибку:

 The method 'add' was called on null.
 
   Stream<List<SpecialEvents>> upcomingSpecialEventsStream(List connections) {
    if (connections.isEmpty) {
      return Stream.value(null);
    }
    
    List event;

    connections.forEach((connection) {
      event.add(_service.collectionStream(
        path: FirestorePath.specialEvents(),
        queryBuilder: (query) => query.where(
          'uid',
          isEqualTo: connection,
        ),
        builder: (data, connection) => SpecialEvents.fromMap(data, connection),
      ));
    });

    return event as Stream;
  }
 

Комментарии:

1. Похоже, что он равен event нулю, вероятно, потому, что вы никогда не создаете список.

2. Не уверен, что вы имеете в виду «событие.добавить». Мне удалось сделать это с помощью Rxdart и объединения потоков, однако я оставляю это без ответа для кого-то, кто может показать некоторый код для добавления этих отдельных потоков коллекции firestore в один поток. Может быть, я лаю не на то дерево. Отсутствие возможности выполнять ИЛИ запросов > 10 является проблемой в firestore.

3. Ошибка говорит о том, что вы звоните add null . Единственный экземпляр .add в коде , которым вы поделились, — это event.add(_service.collectionStream(... , следовательно, похоже, что event именно null тогда выполняется эта строка.