簡體   English   中英

Flutter Firebase 本地更改不更新監聽器 stream

[英]Flutter Firebase local change doesn't update listener stream

我依賴 Firebase Firestore 離線功能,所以我沒有按照Access Data Offline Firebase 文檔中所述對我的查詢使用await 我希望當我寫一些東西時,我會立即反映我的閱讀 stream,但是,我只在服務器/遠程更新時得到更新。 基本上:

  1. 更新數據庫中的內容。 注意,我沒有使用await
 _db.doc(parentDoc).collection(DocInnerCollection).doc(childDoc).update({
        "name": value,
      });
  1. 我希望我的聽眾能立即得到更新。 請注意,我已按照上述文檔中的說明將includeMetadataChanges設置為 true。
_db.doc(parentDoc)
    .collection(DocInnerCollection)
    .orderBy('start_date', 'desc')
    .limitToLast(1)
    .snapshots(includeMetadataChanges: true)
    .map((snapshot) {
  print(snapshot.metadata.isFromCache)
});

但是,我沒有得到這樣的更新,而是在服務器更新后才得到更新。

您只請求一個帶有.limitToLast(1)的文檔,但沒有為您的查詢提供排序順序。 這實質上意味着您將從您的收藏中獲得一個隨機文檔,並且該文檔成為新更新文檔的可能性接近於零。

如果您想要最新的(不僅僅是最后的)文檔,您需要一些排序標准來確定最新的含義。 通常你會通過以下方式做到這一點:

  1. lastUpdated字段添加到您的文檔,並將其設置為firebase.firestore.FieldValue.serverTimestamp()
  2. 使用orderBy('lastUpdated', 'desc')在該時間戳上排序您的查詢
  3. 然后使用limit(1)限制為第一個結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM