From 95cdc047b4827ab3ecbf1063e6d2c07fca9e7d29 Mon Sep 17 00:00:00 2001 From: Jolie <412895109@qq.com> Date: Fri, 2 Jan 2026 23:24:04 +0800 Subject: [PATCH] =?UTF-8?q?feat(im):=20=E6=B7=BB=E5=8A=A0=E6=B4=BB?= =?UTF-8?q?=E8=B7=83=E8=81=8A=E5=A4=A9=E7=94=A8=E6=88=B7ID=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98=E5=8C=96=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=B7=B2=E8=AF=BB=E7=8A=B6=E6=80=81=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现了获取当前正在聊天的用户ID列表的方法 - 在接收消息时检查发送者是否为当前聊天用户 - 自动将当前聊天会话的消息标记为已读状态 - 使用微任务异步处理消息已读标记以优化性能 --- lib/im/im_manager.dart | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/im/im_manager.dart b/lib/im/im_manager.dart index 4f895dd..ad1a393 100644 --- a/lib/im/im_manager.dart +++ b/lib/im/im_manager.dart @@ -60,6 +60,11 @@ class IMManager { // 存储活跃的 ChatController 实例,key 为 userId final Map _activeChatControllers = {}; + /// 获取当前正在聊天的用户ID列表 + Set getActiveChatUserIds() { + return _activeChatControllers.keys.toSet(); + } + // 存储 Presence 状态变化回调,key 为 userId final Map _presenceCallbacks = {}; @@ -219,6 +224,14 @@ class IMManager { // 从消息扩展字段中解析用户信息并缓存 for (var message in messages) { if (message.direction == MessageDirection.RECEIVE && message.onlineState) { + // 检查发送者是否是当前正在聊天的用户 + final fromId = message.from; + if (fromId != null && _activeChatControllers.containsKey(fromId)) { + // 如果是当前正在聊天的联系人,将该会话的所有消息标记为已读 + Future.microtask(() async { + await markAllMessagesAsRead(fromId); + }); + } _parseUserInfoFromMessageExt(message); // 检查发送者是否是当前正在聊天的用户,如果不是则显示弹框