|
|
|
@ -2,6 +2,7 @@ import 'package:get/get.dart'; |
|
|
|
import 'package:get_storage/get_storage.dart'; |
|
|
|
import 'package:im_flutter_sdk/im_flutter_sdk.dart'; |
|
|
|
import '../controller/message/conversation_controller.dart'; |
|
|
|
import '../controller/message/chat_controller.dart'; |
|
|
|
|
|
|
|
// 完整的IM管理器实现,使用实际的SDK类型和方法 |
|
|
|
class IMManager { |
|
|
|
@ -14,6 +15,9 @@ class IMManager { |
|
|
|
|
|
|
|
bool _isInitialized = false; |
|
|
|
|
|
|
|
// 存储活跃的 ChatController 实例,key 为 userId |
|
|
|
final Map<String, ChatController> _activeChatControllers = {}; |
|
|
|
|
|
|
|
IMManager._internal() { |
|
|
|
print('IMManager instance created'); |
|
|
|
} |
|
|
|
@ -76,6 +80,9 @@ class IMManager { |
|
|
|
// 收到新消息时,更新会话列表 |
|
|
|
_refreshConversationList(); |
|
|
|
|
|
|
|
// 通知对应的 ChatController 更新消息列表 |
|
|
|
_notifyChatControllers(messages); |
|
|
|
|
|
|
|
for (var msg in messages) { |
|
|
|
switch (msg.body.type) { |
|
|
|
case MessageType.TXT: |
|
|
|
@ -285,6 +292,51 @@ class IMManager { |
|
|
|
return data[userId]; |
|
|
|
} |
|
|
|
|
|
|
|
/// 注册 ChatController |
|
|
|
void registerChatController(ChatController controller) { |
|
|
|
_activeChatControllers[controller.userId] = controller; |
|
|
|
if (Get.isLogEnable) { |
|
|
|
Get.log('注册 ChatController: ${controller.userId}'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// 注销 ChatController |
|
|
|
void unregisterChatController(String userId) { |
|
|
|
_activeChatControllers.remove(userId); |
|
|
|
if (Get.isLogEnable) { |
|
|
|
Get.log('注销 ChatController: $userId'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// 通知 ChatController 更新消息列表 |
|
|
|
void _notifyChatControllers(List<EMMessage> messages) { |
|
|
|
try { |
|
|
|
// 遍历所有收到的消息 |
|
|
|
for (var message in messages) { |
|
|
|
// 只处理接收到的消息(direction == RECEIVE) |
|
|
|
if (message.direction == MessageDirection.RECEIVE) { |
|
|
|
// 获取消息的发送者ID(from 属性) |
|
|
|
final fromId = message.from; |
|
|
|
|
|
|
|
if (fromId != null && fromId.isNotEmpty) { |
|
|
|
// 查找对应的 ChatController |
|
|
|
final controller = _activeChatControllers[fromId]; |
|
|
|
if (controller != null) { |
|
|
|
controller.addReceivedMessage(message); |
|
|
|
if (Get.isLogEnable) { |
|
|
|
Get.log('通知 ChatController 更新消息: $fromId'); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
if (Get.isLogEnable) { |
|
|
|
Get.log('通知 ChatController 更新消息列表失败: $e'); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// 刷新会话列表 |
|
|
|
void _refreshConversationList() { |
|
|
|
try { |
|
|
|
|