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

Flutter聊天功能:双方无法查看同一会话的问题求助

Flutter 聊天功能接收方无法查看消息的解决方案

问题原因

你当前把消息存在chats/$targetUid/messages路径下:你发消息时,消息会写入对方UID对应的集合;但接收方打开和你的聊天时,会以你的UID作为targetUid去读取chats/你的UID/messages,这个集合里没有任何消息,所以接收方看不到内容。本质是聊天双方没有共用同一个消息存储路径。

解决方案

1. 生成统一的聊天房间ID

把聊天双方的UID按字典序排序后拼接成固定字符串,这样不管是A找B还是B找A,聊天房间ID都是同一个,比如uid1_uid2(uid1字典序小于uid2)。

2. 修改发送消息代码

// 创建消息对象
Message newMessage = Message(
  profImage: myProfilePic,
  username: myName,
  uid: myUid,
  message: message,
  createdAt: DateTime.now(),
);

// 生成统一的聊天集合路径
List<String> uids = [myUid, targetUid];
uids.sort(); // 排序保证双方生成的ID一致
String chatRoomId = '${uids[0]}_${uids[1]}';
final refMessages = _firestore.collection('chats/$chatRoomId/messages');

await refMessages.add(newMessage.toJson());

3. 调整聊天界面的消息读取逻辑

接收方进入聊天界面时,同样用上述方式生成chatRoomId,再读取对应路径的消息:

// 在ChatScreen中生成统一的聊天房间ID
List<String> uids = [currentUserUid, chatPartnerUid];
uids.sort();
String chatRoomId = '${uids[0]}_${uids[1]}';

// 读取消息流
StreamBuilder<QuerySnapshot>(
  stream: _firestore.collection('chats/$chatRoomId/messages')
      .orderBy('createdAt', descending: true)
      .snapshots(),
  builder: (context, snapshot) {
    if (!snapshot.hasData) return const Center(child: CircularProgressIndicator());
    
    return ListView.builder(
      reverse: true, // 最新消息在底部
      itemCount: snapshot.data!.docs.length,
      itemBuilder: (context, index) {
        var messageData = snapshot.data!.docs[index].data() as Map<String, dynamic>;
        // 构建消息气泡
        return MessageBubble(
          message: messageData['message'],
          username: messageData['username'],
          profImage: messageData['profImage'],
          isMe: messageData['uid'] == currentUserUid,
        );
      },
    );
  },
);

聊天列表说明

你提供的聊天列表代码(点击用户进入聊天界面)逻辑没问题,只需确保进入ChatScreen后,用上述统一方式生成chatRoomId读取消息即可。

内容的提问来源于stack exchange,提问作者Jack Duffy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:45:57