Как избежать полной загрузки контента в первый раз из пожарного магазина в флаттере - PullRequest
0 голосов
/ 23 апреля 2020

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

Как избежать полной загрузки в первый раз?

 static StreamSubscription<dynamic> listenMessageChange(Function contentChange) {
    return Firestore.instance
        .collection('contents')
        .snapshots()
        .listen((data) {
          List<Message> changedContents = [];
          data.documentChanges.forEach((change) {
            changedContents.add(Content.createFromMap(change.document.data));
          });
          contentChange(changedContents);
    }, cancelOnError: false);
  }

1 Ответ

1 голос
/ 23 апреля 2020

При прослушивании обновлений в реальном времени сначала будут получены все данные. Единственный способ избежать полной загрузки контента - использовать метод limit(), чтобы вы не получили все при первой загрузке. После этого вы можете проверить, какой документ был изменен / добавлен / удален:

Firestore.instance
        .collection('contents')
        .snapshots()
        .listen((data) {
      data.documentChanges.forEach((res) {
      if (res.type == DocumentChangeType.added) {
        print("added");
        print(res.document.data);
      } else if (res.type == DocumentChangeType.modified) {
        print("modified");
        print(res.document.data);
      } else if (res.type == DocumentChangeType.removed) {
        print("removed");
        print(res.document.data);
      }
    });
...