firebase - 关于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);
});
}
问题是流正在返回所有文档,而不仅仅是新文档,所以我不知道如何“隔离”新文档,更重要的是,如何获取它的值以便将其与我当前的位置进行比较.
有可能做到这一点吗?
解决方案
FirestoreQuerySnapshot
始终包含适合查询的所有信息。但是,当它QuerySnapshot
是对现有侦听器/流的更新时,它还包含有关与QuerySnapshot
侦听器/流上的前一个相比发生了哪些变化的元数据。
要访问此元数据,请使用QuerySnapshot
'docChanges
属性,而不是docs
,并检查每个更改DocumentChangeType
的type
属性以仅查找已添加的文档。在初始快照中将包含所有文档,因为此时所有这些文档都是快照的新内容。
请参阅 Firebase 文档以查看快照之间的更改
推荐阅读
- xaml - Xamarin Forms - 带有空白区域的主详细信息页面
- mysql - 如果我要加入表,COUNT(*) 指的是哪个表?
- python - 使用numpy将数组元素添加到矩阵的每一列
- node.js - Discord.js - 随机获取一个有反应的用户
- javascript - 如何使用 @tensorflow/tfjs-node v2 保存模型?
- python - argparse - 如何将参数从 args 传递到函数中?
- vue.js - 如何使用 Vue js 从数据数组中加载图像?
- dataframe - PySpark DataFrame 过滤器列包含多个值
- java - Maven - 无法在本地解析版本范围的 Maven 依赖项
- numpy - opencv从某个点查找图像中每个像素的距离?