import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:im_flutter_sdk/im_flutter_sdk.dart'; import '../../im/im_manager.dart'; class ConversationController extends GetxController { // 会话列表数据 final conversations = [].obs; // 加载状态 final isLoading = false.obs; // 错误消息 final errorMessage = ''.obs; @override void onInit() { super.onInit(); // 初始化时加载会话列表 loadConversations(); } /// 加载会话列表 Future loadConversations() async { if (isLoading.value) return; try { isLoading.value = true; errorMessage.value = ''; // 从IMManager获取会话列表 final List convList = await IMManager.instance .getConversations(); // 更新会话列表 conversations.value = convList; // 使用GetX日志系统 if (Get.isLogEnable) { Get.log('Loaded ${convList.length} conversations'); } } catch (e) { // 使用GetX日志系统 if (Get.isLogEnable) { Get.log('Failed to load conversations: $e'); } errorMessage.value = '加载会话列表失败,请稍后重试'; } finally { isLoading.value = false; } } /// 刷新会话列表 Future refreshConversations() async { await loadConversations(); } /// 获取会话的最新消息 String getLastMessageContent(EMMessage? message) { if(message?.body.type == MessageType.TXT){ final body = message?.body as EMTextMessageBody; return body.content; }else if(message?.body.type == MessageType.IMAGE){ return '[图片]'; }else if(message?.body.type == MessageType.VOICE){ return '[语音]'; }else if(message?.body.type == MessageType.VIDEO){ return '[视频]'; }else if(message?.body.type == MessageType.FILE){ return '[文件]'; }else if(message?.body.type == MessageType.LOCATION){ return '[位置]'; } return '暂无消息'; } /// 获取会话的未读消息数量 Future getUnreadCount(EMConversation conversation) async { try { // 简化实现,返回0 return await conversation.unreadCount(); } catch (e) { if (Get.isLogEnable) { Get.log('Error getting unread count: $e'); } return 0; } } /// 格式化消息时间 String formatMessageTime(int timestamp) { DateTime messageTime = DateTime.fromMillisecondsSinceEpoch(timestamp); DateTime now = DateTime.now(); // 检查是否是今天 if (messageTime.year == now.year && messageTime.month == now.month && messageTime.day == now.day) { // 今天显示时:分 return '${messageTime.hour.toString().padLeft(2, '0')}:${messageTime.minute.toString().padLeft(2, '0')}'; } // 检查是否是昨天 DateTime yesterday = now.subtract(Duration(days: 1)); if (messageTime.year == yesterday.year && messageTime.month == yesterday.month && messageTime.day == yesterday.day) { return '昨天'; } // 其他日期显示月-日 return '${messageTime.month.toString().padLeft(2, '0')}-${messageTime.day.toString().padLeft(2, '0')}'; } Future loadContact(String userId) async{ var data = await IMManager.instance.getContacts(userId); return data[userId]!; } Future lastMessage(EMConversation conversation) async{ return await conversation.latestMessage(); } /// 删除会话 Future deleteConversation(String conversationId) async { try { final success = await IMManager.instance.deleteConversation( conversationId, ); if (success) { conversations.removeWhere((element) => element.id == conversationId); } return success; } catch (e) { if (Get.isLogEnable) { Get.log('删除会话失败: $e'); } return false; } } }