Что является эквивалентом ValueEventListener в Firestore для приложения FLUTTER? - PullRequest
0 голосов
/ 13 апреля 2020

Обновлено !!

Предположим, у меня есть коллекция с именем collection_name с идентификатором документа signature_user_id . Я пытаюсь прослушать дочерний узел signature_user_id и выполнить одну задачу, только если этот документ signature_user_id изменится. Он работает, но вызывается дважды при попытке прослушать изменения документа.

_listenForHtmlContentUpdate() {
widget.firestore
    .collection('collection_name')
    .document('signed_user_id')
    .snapshots()
    .listen((event) {
  print('object');
  print(event.data);
});

И во втором случае давайте предположим, что у меня есть внутренняя коллекция и внутренний документ с именем html_do c. Итак, я хочу слушать, когда поле документа html_do c изменяется. Эта функция не работает, когда я использую несколько сборников и документов. Я имею в виду при попытке прослушивания внутренних html_do c обновлений / изменений документа. Итак, как прослушать внутренние изменения документа с помощью флаттера?

_listenForHtmlContentUpdate() {
widget.firestore
    .collection('collection_name')
    .document('signed_user_id')
    .collection('html')
    .document('html_doc')
    .snapshots()
    .listen((event) {
  print('object');
  print(event.data);
});

}

Обновление Firestore вызывает дважды: A cc к документации. Локальные записи в вашем приложении немедленно вызовут прослушиватели снимков. Это связано с важной функцией, называемой «компенсацией задержки». Когда вы выполняете запись, ваши слушатели будут уведомлены с новыми данными, прежде чем данные будут отправлены на сервер.

Полученные документы имеют свойство metadata.hasPendingWrites, которое указывает, есть ли у документа локальные изменения, которые не имеют было написано в бэкэнд еще. Вы можете использовать это свойство, чтобы определить источник событий, полученных слушателем снимка. Это причина для звонка дважды.

_listenForHtmlContentUpdate() {
print('_listenForHtmlContentUpdate *****');
widget.firestore
    .collection('resume')
    .document('signed_user_id')
    .snapshots()
    .listen((event) {
  // check and perform the task accordingly.
  var source = event.metadata.hasPendingWrites ? "Local" : "Server";
  print(source);
});

1 Ответ

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

Метод snapshots() эквивалентен ValueEventListener, оба будут прослушивать любые изменения в реальном времени. Но в firestore вы не можете прослушивать одно поле в документе. snapshot() выдаст обновления в реальном времени, если в документе произойдут какие-либо изменения.

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