【问题标题】:Listen only to changes in document instead of all the time只听文件的变化而不是一直听
【发布时间】:2021-06-11 02:26:42
【问题描述】:

我只想在 firebase 中收听文档中的更改,但现在似乎每时每刻都在收听,尽管没有任何更改。我可以看到,因为当我将它打印到控制台时,它永远不会停止。

FirebaseFirestore.instance
    .collection('users')
    .doc(user.uid)
    .snapshots()
    .listen((DocumentSnapshot documentSnapshot) {

  Map firestoreInfo = documentSnapshot.data();
  setState(() {
    name = firestoreInfo['name'];
  });
});

有人可以帮忙吗?另外,我似乎没有可以调用文档快照数据的“documentChanges”方法。

【问题讨论】:

  • 这段代码你是在代码的哪一部分写的?
  • 您应该通过 if name != firestoreInfo['name'] 来检查更改
  • 简单地说,你不能

标签: firebase flutter google-cloud-firestore


【解决方案1】:

当您将侦听器附加到 Firestore 时,它​​最初会使用数据库中文档的当前值触发。然后在文档更改时触发。没有办法跳过监听器的初始值。

获得所需行为的常用方法是:

  1. 在用户文档中存储 lastUpdated 时间戳字段。
  2. 使用查询仅返回 lastUpdated 在“现在”之后的文档。
  3. 要对具有特定 ID 的文档执行此类查询,您需要在 FieldPath.documentId 上使用条件。

【讨论】:

    猜你喜欢
    • 2012-01-13
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    相关资源
    最近更新 更多