|
|
|
@ -60,6 +60,11 @@ class IMManager { |
|
|
|
// 存储活跃的 ChatController 实例,key 为 userId |
|
|
|
final Map<String, ChatController> _activeChatControllers = {}; |
|
|
|
|
|
|
|
/// 获取当前正在聊天的用户ID列表 |
|
|
|
Set<String> getActiveChatUserIds() { |
|
|
|
return _activeChatControllers.keys.toSet(); |
|
|
|
} |
|
|
|
|
|
|
|
// 存储 Presence 状态变化回调,key 为 userId |
|
|
|
final Map<String, Function(bool)> _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); |
|
|
|
// 检查发送者是否是当前正在聊天的用户,如果不是则显示弹框 |
|
|
|
|