Flutter FlatterFireStore如何实现facebook/linkedin这样的通知面板?
希望创建一个通知页面,显示用户交互的所有事件,如下所示 如何实时跟踪文档更新,例如,添加到帖子的新评论、从挂起状态更新到接受状态等 是否有可用的firestore功能 如果唯一的解决方案是读取更新的文档,然后将更改与缓存数据进行比较,那么如何实现“实时跟踪”?由于更新是由另一个用户发起的,如何在通知接收方不采取任何行动的情况下触发“文档更新检查”?此外,这听起来像是一种昂贵的方式,因为应用程序需要执行大量的读写操作……您可以使用集合/文档引用的snapshots()函数。 该函数返回一个流,可在集合或文档中侦听相关更新。 下面的示例来自Flatter的firestore云:Flutter FlatterFireStore如何实现facebook/linkedin这样的通知面板?,flutter,google-cloud-firestore,notifications,android-notifications,Flutter,Google Cloud Firestore,Notifications,Android Notifications,希望创建一个通知页面,显示用户交互的所有事件,如下所示 如何实时跟踪文档更新,例如,添加到帖子的新评论、从挂起状态更新到接受状态等 是否有可用的firestore功能 如果唯一的解决方案是读取更新的文档,然后将更改与缓存数据进行比较,那么如何实现“实时跟踪”?由于更新是由另一个用户发起的,如何在通知接收方不采取任何行动的情况下触发“文档更新检查”?此外,这听起来像是一种昂贵的方式,因为应用程序需要执行大量的读写操作……您可以使用集合/文档引用的snapshots()函数。 该函数返回一个流,可
类用户信息扩展无状态小部件{
@凌驾
小部件构建(构建上下文){
CollectionReference users=FirebaseFirestore.instance.collection('users');
返回流生成器(
流:users.snapshots(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasError){
返回文本(“出错”);
}
if(snapshot.connectionState==connectionState.waiting){
返回文本(“加载”);
}
返回新的ListView(
子项:snapshot.data.docs.map((DocumentSnapshot文档){
返回新的ListTile(
标题:新文本(document.data()['full_name']),
字幕:新文本(document.data()['company']),
);
}).toList(),
);
},
);
}
}
这并没有回答问题,很抱歉听到这个消息-您可以使用QuerySnapshot的docChanges属性。类似于:CollectionReference users=FirebaseFirestore.instance.collection('users');users.snapshot().listen((QuerySnapshot event){event.docChanges.forEach((change){//Do something with change});希望这有帮助,否则如果您能解释为什么这对您不起作用,我会很高兴:)如果添加了新文档怎么办?docChanges可以跟踪新文档吗?
class UserInformation extends StatelessWidget {
@override
Widget build(BuildContext context) {
CollectionReference users = FirebaseFirestore.instance.collection('users');
return StreamBuilder<QuerySnapshot>(
stream: users.snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError) {
return Text('Something went wrong');
}
if (snapshot.connectionState == ConnectionState.waiting) {
return Text("Loading");
}
return new ListView(
children: snapshot.data.docs.map((DocumentSnapshot document) {
return new ListTile(
title: new Text(document.data()['full_name']),
subtitle: new Text(document.data()['company']),
);
}).toList(),
);
},
);
}
}