Firebase Cloud Firestore не отображает все записи в консоли

# #database #firebase #flutter #dart #google-cloud-firestore

Вопрос:

У меня есть простое приложение, в котором я могу отправить идентификатор (строку) в firebase firestore, и оно сохраняет объект с идентификатором и текущим временем.

Во время тестирования я заметил одну вещь: когда я удаляю данные из firestore прямо через консоль, мое приложение все еще думает, что данные находятся в базе данных, а когда я добавляю данные через консоль, мое приложение их не видит. Он работает должным образом только тогда, когда данные добавляются и удаляются из моего приложения. Это почему? Разве приложение не должно просто видеть, что в настоящее время находится в базе данных, без этого странного поведения?

Как я получаю данные из базы данных во время тестирования:

   static Future<void> printEntries() async {
    QuerySnapshot snapshot = await songList.snapshots().first;
    snapshot.docs.forEach((element) {
      print('Element in database: ${element['id']}');
    });
    print('***************');
  }
 

Эта функция вызывается, когда я нажимаю кнопку. Ничего особенного.

Список песен-это переменная, объявленная ранее следующим образом:

   static final CollectionReference songList = FirebaseFirestore.instance.collection('MyRoom');
 

Я попытался удалить всю коллекцию, но каким-то образом мое приложение все равно получает данные, сохраненные ранее, хотя консоль firestore их не показывает.

Ответ №1:

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

 db.collection("cities").doc("SF")
    .onSnapshot((doc) => {
        console.log("Current data: ", doc.data());
    }); 

Ссылка: Прослушивание изменений в коллекции firestore