我只想监听firebase中文档的更改,但现在似乎它每时每刻都在监听,尽管没有任何更改。我可以看到这一点,因为当我将其打印到控制台时,它永远不会停止。
FirebaseFirestore.instance
.collection('users')
.doc(user.uid)
.snapshots()
.listen((DocumentSnapshot documentSnapshot) {
Map firestoreInfo = documentSnapshot.data();
setState(() {
name = firestoreInfo['name'];
});
});
有人可以帮忙吗?另外,似乎没有“documentChanges”方法对我来说可以调用文档快照数据。
当您将侦听器附加到 Firestore 时,它最初会使用数据库中文档的当前值触发。然后,只要文档发生更改,它就会触发。无法跳过侦听器的初始值。
获得所需行为的常见方法是:
lastUpdated
时间戳字段。lastUpdated
在“now”之后的文档。FieldPath.documentId
上使用条件。如果使用 QuerySnapshot 就可以实现这一点
有一个 DocumentChange
请参阅 firebase 文档。
修改文档有更改类型 -
docChange.Type == DocumentChangeType.modified
您可以使用-
查看文档的新值 docChange.document
代码-
Query query = FirebaseFirestore.instance
.collection('users')
.where("userId", isEqualTo: user.uid)
.limit(1)
query.snapshots().listen((QuerySnapshot<Object?> event) {
for (var change in event.docChanges) {
if (change.doc.data() != null && change.type == DocumentChangeType.modified){
print('Document data: ${change.doc.data()}');
} else {
print('Document does not exist');
}
}
});