Флаг isFromCache
указывает, гарантированно ли документ обновлен на сервере, или это может быть устаревший результат из кэша. Если это false
, это не обязательно означает, что документ был прочитан с сервера, но вы можете быть уверены, что документ обновлен на сервере.
Чтобы показать, что это значит, я могу этот фрагмент
var snapshotsStream = Firestore.instance.collection("chat").orderBy("timestamp", descending: true).limit(3).snapshots();
snapshotsStream.listen((querySnapshot) {
print("We got a new QuerySnapshot");
querySnapshot.documents.forEach((doc) {
print(doc.documentID+": "+(doc.metadata.isFromCache ? "from CACHE " : "from SERVER "));
});
querySnapshot.documentChanges.forEach((docChange) {
print(docChange.type.toString()+(docChange.document.metadata.isFromCache ? "doc from CACHE " : "doc from SERVER "));
});
}, onError: (error) {
print(error);
});
Первоначально я получаю вывод:
флаттер: мы получили новый QuerySnapshot
флаттер: 5nAr5pYgwXJ0n3pWZkLw: от SERVER
флаттер: moysGY7Ea7TCf28fcEV C: от сервера SERVER
флаттер: PuNnPaiLMIE7704R9NuL: от сервера SERVER
флаттер: 5nAr5pYgwXJ0n3pWZJ0n3pWZFLWYDFFF * * * * C: DocumentChangeType.addeddo c от SERVER
флаттер: PuNnPaiLMIE7704R9NuL: DocumentChangeType.addeddo c от SERVER
Затем, когда я изменяю сервер, он печатает:
флаттер: мы получили новый QuerySnapshot
флаттер: 5nAr5pYgwXJ0n3pWZkLw: от SERVER
флаттер: moysGY7Ea7TCf28fcEV C от: ERVER
флаттер: PuNnPaiLMIE7704R9NuL: от СЕРВЕРА
флаттер: 5nAr5pYgwXJ0n3pWZkLw: DocumentChangeType.modifieddo c от СЕРВЕРА
isFromCache
означает, что свойство не равно 1038 *
, а значит *, значит, свойство *1038* * 1040 не равно чтобы определить, был ли документ считан для чтения на сервере, но гарантированно ли документ обновлен на сервере.
Чтобы узнать, какие документы были изменены, вы можете выполнить итерацию по коллекции documentChanged
, как показано в приведенном выше коде.
Что касается чтения больше, чем вы ожидали, одной из наиболее распространенных причин этого является сохранение панели Firestore открытой в консоли Firebase. Чтения, выполняемые консолью, оплачиваются для вашего проекта. Подробнее об этом см .: