Flutter中如何用Stream查询获取登录用户的所有聊天室
Firestore 聊天室查询解决方案
数据结构说明
我创建了chatrooms集合,每个文档包含:
id:聊天室唯一标识last message:聊天室的最后一条消息内容participants:映射类型字段,键为成员的userid,值为布尔类型,用于标记该成员是否被屏蔽
查询需求与对应实现
1. 获取登录用户所属的所有聊天室
需要判断participants映射中是否存在登录用户userid这个键,无论对应布尔值是true还是false,可以使用FieldValue.exists()来实现:
stream: FirebaseFirestore.instance .collection('chatrooms') .where("participants.${widget.user.userid.toString()}", isEqualTo: FieldValue.exists()) .snapshots(),
2. 获取被登录用户屏蔽的聊天室
直接筛选participants中登录用户userid对应值为false的文档:
stream: FirebaseFirestore.instance .collection('chatrooms') .where("participants.${widget.user.userid.toString()}", isEqualTo: false) .snapshots(),
3. 获取被目标用户屏蔽的聊天室
将登录用户的userid替换为目标用户的userid,筛选对应值为false的文档:
// 假设targetUserId为目标用户的ID stream: FirebaseFirestore.instance .collection('chatrooms') .where("participants.${targetUserId.toString()}", isEqualTo: false) .snapshots(),
内容的提问来源于stack exchange,提问作者Irfan Ganatra
相关产品推荐
相关产品推荐

