在 firestore 更改时发出本地通知
flutter local notification on firestore change
在我的 firestore 中,我有一个代表地图上位置的文档列表。
我想不仅在数据库中创建新文档时显示本地通知,而且在该位置距我当前位置一定距离内时也显示本地通知。
目前我有一个 streambuilder 可以将位置加载到我的本地地图中,还有一个 streamlistener 可以在新文档上发出通知:
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);
});
}
问题是流正在返回所有文档,而不仅仅是新文档,所以我不知道如何“隔离”新文档,更重要的是,如何获取它的值以便进行比较它与我当前的位置。
这样可以实现吗?
Firestore QuerySnapshot
始终包含适合查询的所有信息。但是当 QuerySnapshot
是对现有 listener/stream 的更新时,它还包含关于与 listener/stream.
上的前一个 QuerySnapshot
相比有哪些变化的元数据。
要访问此元数据,请使用每个更改的 QuerySnapshot
的 docChanges
property, rather than docs
, and check the DocumentChangeType
type
属性 来仅查找已添加的文档。在初始快照中,这将是所有文档,因为此时所有文档都是快照的新内容。
上的 Firebase 文档
在我的 firestore 中,我有一个代表地图上位置的文档列表。
我想不仅在数据库中创建新文档时显示本地通知,而且在该位置距我当前位置一定距离内时也显示本地通知。
目前我有一个 streambuilder 可以将位置加载到我的本地地图中,还有一个 streamlistener 可以在新文档上发出通知:
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);
});
}
问题是流正在返回所有文档,而不仅仅是新文档,所以我不知道如何“隔离”新文档,更重要的是,如何获取它的值以便进行比较它与我当前的位置。
这样可以实现吗?
Firestore QuerySnapshot
始终包含适合查询的所有信息。但是当 QuerySnapshot
是对现有 listener/stream 的更新时,它还包含关于与 listener/stream.
QuerySnapshot
相比有哪些变化的元数据。
要访问此元数据,请使用每个更改的 QuerySnapshot
的 docChanges
property, rather than docs
, and check the DocumentChangeType
type
属性 来仅查找已添加的文档。在初始快照中,这将是所有文档,因为此时所有文档都是快照的新内容。