You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:56:06