简体   繁体   中英

flutter local notification on firestore change

In my firestore I have a list of documents which represent locations on a map.

I would like to show a local notification not only when a new document is created in the database, but also when the location is within a certain distance from my current location.

At the moment I have a streambuilder which loads the position into my local map, and a streamlistener to give a notification on a new document:

  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);

    });
  }

the problem is that the stream is returning ALL the documents, not only the new one, so I have no idea how to "isolate" the new one and, more important, how to get its value in order to compare it with my current location.

Is that possible to achieve so?

A Firestore QuerySnapshot always contains all information that fits within the query. But when the QuerySnapshot is an update on an existing listener/stream, it also contains metadata about what changes compared to the previous QuerySnapshot on the listener/stream.

To get access to this metadata, use the QuerySnapshot 's docChanges property , rather than docs , and check the DocumentChangeType of the type property of each change to find only the documents that were added. In the initial snapshot that will be all of the documents, since all of them are new to the snapshot at that point.

See the Firebase documentation on viewing changes between snapshots

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM