Dart 如何使用flatter在CloudFireStore中侦听文档更改?
我希望有一个侦听器方法,在发生更改时检查文档集合的更改 比如:Dart 如何使用flatter在CloudFireStore中侦听文档更改?,dart,google-cloud-firestore,flutter,Dart,Google Cloud Firestore,Flutter,我希望有一个侦听器方法,在发生更改时检查文档集合的更改 比如: import 'package:cloud_firestore/cloud_firestore.dart'; Future<Null> checkFocChanges() async { Firestore.instance.runTransaction((Transaction tx) async { CollectionReference reference = Firestore.ins
import 'package:cloud_firestore/cloud_firestore.dart';
Future<Null> checkFocChanges() async {
Firestore.instance.runTransaction((Transaction tx) async {
CollectionReference reference = Firestore.instance.collection('planets');
reference.onSnapshot.listen((querySnapshot) {
querySnapshot.docChanges.forEach((change) {
// Do something with change
});
});
});
}
import'包:cloud_firestore/cloud_firestore.dart';
Future checkFocChanges()异步{
Firestore.instance.runTransaction((事务发送)异步{
CollectionReference=Firestore.instance.collection('planets');
reference.onSnapshot.listen((querySnapshot){
querySnapshot.docChanges.forEach((更改){
//做些改变
});
});
});
}
这里的错误是,onSnapshot
未在CollectionReference
上定义
有什么想法吗?通读一遍,您可以看到来自查询的流可以通过快照()
获得
为了让您理解,我将稍微转换您的代码:
CollectionReference reference = Firestore.instance.collection('planets');
reference.snapshots().listen((querySnapshot) {
querySnapshot.documentChanges.forEach((change) {
// Do something with change
});
});
您也不应该在事务中运行此操作。颤振实现这一点的方法是使用StreamBuilder
,直接从:
StreamBuilder(
流:Firestore.instance.collection('books').snapshots(),
生成器:(BuildContext上下文,异步快照){
如果(!snapshot.hasData)返回新文本('Loading…');
返回新的ListView(
子项:snapshot.data.documents.map((DocumentSnapshot文档){
返回新的ListTile(
标题:新文本(文件['title']),
副标题:新文本(文档['author']),
);
}).toList(),
);
},
);
如果你想知道更多,你可以,它有很好的文档记录,在那里它不是不言自明的
还要注意,我将docChanges
更改为documentChanges
。你可以在照片上看到。如果您使用的是IntelliJ或Android Studio等IDE,也可以很容易地点击其中的文件。谢谢。我在planets
上监听更改的理由是,如果某些内容发生更改,则执行一些逻辑,而不仅仅是在视图中显示结果。在flatter
中,我将把checkForChanges()
放在哪里,以便在firebase更改时触发它?我想在initState
覆盖中。@Patrioticcow是的,为什么不呢?query.snapshots()
流上的listen
函数将在更改时触发。@creativecreatormormaybeno请告诉我,如何取消此订阅?将其分配给流订阅并取消它不起作用,snapshots.listen()仍在运行这将在每次小部件重建时触发。您能告诉我如何防止这种情况发生,并且仍然能够使用快照侦听器,以便不丢失实时更新吗@肌性呼吸暂停
StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection('books').snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) return new Text('Loading...');
return new ListView(
children: snapshot.data.documents.map((DocumentSnapshot document) {
return new ListTile(
title: new Text(document['title']),
subtitle: new Text(document['author']),
);
}).toList(),
);
},
);