【问题标题】:flutter local notification on firestore change关于firestore更改的本地通知
【发布时间】:2021-12-24 21:20:38
【问题描述】:

在我的 Firestore 中,我有一个代表地图上位置的文档列表。

我希望不仅在数据库中创建新文档时显示本地通知,而且还希望在该位置与我当前位置相距一定距离时显示本地通知。

目前我有一个流构建器,可以将位置加载到我的本地地图中,还有一个流监听器,用于在新文档上发出通知:

  CollectionReference loc =
      FirebaseFirestore.instance.collection('locations');
  late Stream<QuerySnapshot> _locStream;
  late StreamSubscription<QuerySnapshot> streamSub;

  @override
  void initState() {
    super.initState();
    _locStream = loc.snapshots();

    streamSub = _locStream.listen((data) {
      final snackBar = SnackBar(
          content:
              Text('New location added!'));

      ScaffoldMessenger.of(context).showSnackBar(snackBar);

    });
  }

问题是流正在返回所有文档,而不仅仅是新文档,所以我不知道如何“隔离”新文档,更重要的是,如何获取它的值以便与它进行比较我现在的位置。

这样可以实现吗?

【问题讨论】:

    标签: firebase flutter google-cloud-firestore stream


    【解决方案1】:

    Firestore QuerySnapshot 始终包含适合查询的所有信息。但是,当QuerySnapshot 是对现有侦听器/流的更新时,它还包含有关与侦听器/流上的先前QuerySnapshot 相比发生了什么变化的元数据。

    要访问此元数据,请使用QuerySnapshotdocChanges property,而不是docs,并检查每个更改的type 属性的DocumentChangeType 以仅查找已添加的文档.在初始快照中将包含所有文档,因为此时所有这些文档都是快照的新内容。

    请参阅 viewing changes between snapshots 上的 Firebase 文档

    【讨论】:

    • 了解如何“隔离”初始快照也会很有趣。否则,将在每次应用启动时为快照中包含的所有文档显示小吃栏
    • 没有内置任何东西。如果您只想显示新数据的通知,您将只想查询新数据。例如,如果“新”对您来说意味着它在某个日期/时间之后,请在每个文档中包含一个时间戳,并使用查询来检索只有该日期/时间的文档。
    • 好清楚。我以为已经有一些开箱即用的东西了 :) 谢谢弗兰克
    猜你喜欢
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 2010-11-11
    • 1970-01-01
    • 2018-11-06
    相关资源
    最近更新 更多