import 'package:get/get.dart'; import '../../im/im_manager.dart'; import 'package:im_flutter_sdk/im_flutter_sdk.dart'; class ChatController extends GetxController { final String userId; // 用户信息 final Rx userInfo = Rx(null); // 消息列表 final RxList messages = RxList([]); // 加载更多的游标 String? _cursor; ChatController({required this.userId}); @override void onInit() { super.onInit(); // 初始化时获取用户信息和消息列表 fetchUserInfo(); fetchMessages(); } /// 获取用户信息 Future fetchUserInfo() async { try { final EMUserInfo? info = await IMManager.instance.getUserInfo(userId); if (info != null) { userInfo.value = info; if (Get.isLogEnable) { Get.log('获取用户信息成功: ${info.nickName}'); } } else { if (Get.isLogEnable) { Get.log('未找到用户信息: $userId'); } } } catch (e) { if (Get.isLogEnable) { Get.log('获取用户信息失败: $e'); } } } /// 发送消息 Future sendMessage(String content) async { try { final message = await IMManager.instance.sendTextMessage(content, userId); if (message != null) { // 发送成功后将消息添加到列表开头 messages.insert(0, message); update(); return true; } return false; } catch (e) { if (Get.isLogEnable) { Get.log('发送消息失败: $e'); } return false; } } /// 发送图片消息 Future sendImageMessage(String imagePath) async { try { final message = await IMManager.instance.sendImageMessage(imagePath, userId); if (message != null) { // 发送成功后将消息添加到列表开头 messages.insert(0, message); update(); return true; } return false; } catch (e) { if (Get.isLogEnable) { Get.log('发送图片消息失败: $e'); } return false; } } /// 获取消息列表 Future fetchMessages({bool loadMore = false}) async { try { final List fetchedMessages = await IMManager.instance.getMessages( userId, pageSize: 20, startMsgId: loadMore ? _cursor : null, ); // 过滤掉null消息 final List validMessages = fetchedMessages.whereType().toList(); if (loadMore) { // 加载更多时添加到列表末尾 messages.addAll(validMessages); } else { // 刷新时替换整个列表 messages.assignAll(validMessages); } // 通知UI更新 update(); // 更新游标 if (validMessages.isNotEmpty) { _cursor = validMessages.last.msgId; } if (Get.isLogEnable) { Get.log('获取消息成功,数量: ${validMessages.length}'); } } catch (e) { if (Get.isLogEnable) { Get.log('获取消息失败: $e'); } } } /// 加载更多消息 Future loadMoreMessages() async { if (_cursor != null) { await fetchMessages(loadMore: true); } } }