Потоки Firebase извлекают данные, которые я не вижу в консоли

# #flutter #dart #google-cloud-firestore

Вопрос:

да, я полагаю, что это звучит довольно странно, но, возможно, у кого-то из вас есть идея или, по крайней мере, подсказка, с чего я мог бы начать поиск: я создаю приложение с flutter и cloud firestore в качестве сервера. Я подключил свое приложение к коллекциям в консоли, я настроил потоки — все работало нормально, и данные поступали быстро, чтобы отображаться так, как я хотел. Теперь, уже несколько дней, я пытался создать новую функцию, которая создает новые объекты в firestore. В целях тестирования я также удалил несколько уже существующих, что приводит к тому, что объекты, которые я вижу в консоли, равны 3. Однако поток извлекает 11, в том числе те, которые я удалил вручную, и несколько, которые были успешно созданы с помощью моей функции, но даже не отображаются в консоли. И кажется, что они появляются из ниоткуда. Я дважды проверил все остальные коллекции, но этим объектам негде спрятаться. И теперь я не знаю, что делать. Я не могу продолжать так работать. Я добавлю немного кода, чтобы показать, что я обрабатываю данные. Может быть, кто-то уже сталкивался с таким странным поведением?

   Widget _fetchAllGroupsAndBuildList(){
    return StreamBuilder<List<Group>>(
        stream: DatabaseService().groups,
        builder: (context, snapshot){
          if(snapshot.hasData)
          {
            allGroups = snapshot.data;
            return _buildAllGroupsList();
          }
          else if(snapshot.hasError){
            print(snapshot.error);
            return Container(child: Text("Ups, something went wrong."));
          }else{
            return Container(child: Text("Ups, something went wrong."));
          }
        }
    );
  }

  Stream<List<Group>> get groups {
    try {
      return groupCollection.snapshots()
          .map(_groupListFromSnapshot);
    } catch (e) {
      print("Database, getGroups: "   e.toString());
      return null;
    }
  }

  final CollectionReference groupCollection = FirebaseFirestore.instance.collection(
      'groups');
 

Ответ №1:

Похоже, у вас включена автономная сохраняемость, и вы получаете кэшированную версию своих данных.

Он включен по умолчанию, и вы можете отключить его следующим образом:

 FirebaseFirestore.instance.settings =
    Settings(persistenceEnabled: false);
 

Примечание: Это должно быть установлено до выполнения любого взаимодействия с Firestore.

Ответ №2:

Итак, если кто-нибудь наткнется на это: ошибка произошла из-за версий различных компонентов firebase. Я обновил все зависимости в pubspec.yml до последней версии и заменил устаревшие функции последними. Код был скомпилирован просто отлично, но функциональность была утеряна. Я понятия не имею, почему и как, но в конце концов я снова понизил рейтинг версий, использовал более старые, и внезапно все снова заработало хорошо.

Надеюсь, это удержит кого-нибудь от поиска решения в течение нескольких дней.