我用firebase的firestore聊天。
所以.我试过在聊天列表中快速不读计数.
但是,最初的数字出现,但它改变为空数据.
我不知道为什么数据改变空数据?
class ChatLength extends StatelessWidget {
const ChatLength({super.key, required this.docId, required this.uid});
final String docId;
final String uid;
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: FirebaseFirestore.instance
.collection('message_read')
.doc(docId)
.collection('message')
.where('userId', isNotEqualTo: uid)
.where('read', isEqualTo: false)
.snapshots(),
builder: (context, snapshot) {
print(snapshot.data?.size);
if (snapshot.data?.size != null) {
return Container(
child: Text('${snapshot.data?.size}'),
);
} else {
return Container();
}
},
);
}
}
===== Debug console ====
flutter: 1
flutter: null // Data changes to null immediately
1.我正在尝试从Firestore获取快照数据。
1.然后我把导入的数据放进文本中。
1.但数据立即变为空。
1条答案
按热度按时间deyfvvtc1#
由于使用了
snapshots()
,代码不仅阅读数据一次,而且还继续监听数据的变化,因此您看到的两个值意味着snapshots()
流被触发了两次,第一次只有一条消息,第二次没有任何消息。我有经验的猜测是,您的代码在获取文档后更改了该文档的
read
值,因为它现在已经向用户显示了该消息,但这样做意味着该文档不再满足您的查询条件,因此snapshots
流将获取一个新事件,其中不包含该消息。考虑使用不同的查询机制,例如,我通常使用时间戳来确定要显示哪些消息。