繁体   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