首页 > 解决方案 > 关于firestore更改的本地通知

问题描述

在我的 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);

    });
  }

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

有可能做到这一点吗?

标签: firebasefluttergoogle-cloud-firestorestream

解决方案


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

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

请参阅 Firebase 文档以查看快照之间的更改


推荐阅读