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); // 检查发送者是否是当前正在聊天的用户,如果不是则显示弹框