Обновлено !!
Предположим, у меня есть коллекция с именем 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);
});