Firestore не слушает запрос (Flutter) - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь прослушать изменения документа с помощью следующего кода: (Флаттер)

   Firestore.instance
        .collection('myCollection')
        .where("owners.${myUserID}", isEqualTo: true)
        .orderBy("lastRef", descending: true)
        .snapshots()
        .listen((data) {
      print("listening");
      data.documentChanges.forEach((change) {
        setState(() {
          myList = data.documents;
        });
      });
    });

Этот код работает только один раз, он добавляет все нужные документы в список, но когда документ обновлено, ничего не делает ...

Я пробовал этот код (без запроса where)

   Firestore.instance
        .collection('myCollection')
        .orderBy("lastRef", descending: true)
        .snapshots()
        .listen((data) {
      print("listening");
      data.documentChanges.forEach((change) {
        setState(() {
          myList = data.documents;
        });
      });
    });

Отлично работает, даже когда документ обновляется

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

Indexed fields: owners (array), lastRef (descending)

Что я делаю не так?

Заранее спасибо!

1 Ответ

1 голос
/ 22 февраля 2020

То, что data.documentChanges.forEach((change) { вокруг setState звонка выглядит мне подозрительно. Насколько я вижу, вы должны установить документы в состояние, когда ваш слушатель будет вызван.

Так что-то вроде:

Firestore.instance
    .collection('myCollection')
    .where("owners.${myUserID}", isEqualTo: true)
    .orderBy("lastRef", descending: true)
    .snapshots()
    .listen((data) {
  setState(() {
    myList = data.documents;
  });
});

Я сомневаюсь, что это изменит проблему с вашим запрос, но я бы рекомендовал изменить это в любом случае, поскольку это упрощает ваш слушатель и делает его более идиоматическим c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...