Browse Source

feat(im): 实现消息发送后自动刷新会话列表功能

- 在 ChatController 中添加 _refreshConversationList 方法
- 在 IMManager 中添加 _refreshConversationList 方法
- 消息发送成功后调用会话列表刷新逻辑
- 收到新消息时自动刷新会话列表
- 使用 Get.find 获取 ConversationController 实例
- 添加异常处理避免控制器未注册时的错误
ios
Jolie 4 months ago
parent
commit
ececa536a4
3 changed files with 252 additions and 206 deletions
  1. 27
      lib/controller/message/chat_controller.dart
  2. 35
      lib/im/im_manager.dart
  3. 396
      pubspec.lock

27
lib/controller/message/chat_controller.dart

@ -2,6 +2,7 @@ import 'package:get/get.dart';
import '../../im/im_manager.dart';
import 'package:im_flutter_sdk/im_flutter_sdk.dart';
import 'conversation_controller.dart';
class ChatController extends GetxController {
final String userId;
@ -54,6 +55,8 @@ class ChatController extends GetxController {
//
messages.insert(0, message);
update();
//
_refreshConversationList();
return true;
}
return false;
@ -76,6 +79,8 @@ class ChatController extends GetxController {
//
messages.insert(0, message);
update();
//
_refreshConversationList();
return true;
}
return false;
@ -99,6 +104,8 @@ class ChatController extends GetxController {
//
messages.insert(0, message);
update();
//
_refreshConversationList();
return true;
}
return false;
@ -116,7 +123,7 @@ class ChatController extends GetxController {
print('🎬 [ChatController] 准备发送视频消息');
print('视频路径: $filePath');
print('视频时长: $duration');
final message = await IMManager.instance.sendVideoMessage(
filePath,
userId,
@ -128,6 +135,8 @@ class ChatController extends GetxController {
//
messages.insert(0, message);
update();
//
_refreshConversationList();
return true;
}
print('❌ [ChatController] 视频消息创建失败');
@ -188,4 +197,20 @@ class ChatController extends GetxController {
await fetchMessages(loadMore: true);
}
}
///
void _refreshConversationList() {
try {
// ConversationController
if (Get.isRegistered<ConversationController>()) {
final conversationController = Get.find<ConversationController>();
conversationController.refreshConversations();
}
} catch (e) {
// ConversationController
if (Get.isLogEnable) {
Get.log('刷新会话列表失败: $e');
}
}
}
}

35
lib/im/im_manager.dart

@ -1,5 +1,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';
// IM管理器实现使SDK类型和方法
class IMManager {
@ -71,6 +73,9 @@ class IMManager {
"",
EMChatEventHandler(
onMessagesReceived: (messages) {
//
_refreshConversationList();
for (var msg in messages) {
switch (msg.body.type) {
case MessageType.TXT:
@ -167,16 +172,16 @@ class IMManager {
///
Future<EMMessage?> sendVoiceMessage(
String filePath,
String toChatUsername,
int duration
) async {
String filePath,
String toChatUsername,
int duration,
) async {
try {
//
final message = EMMessage.createVoiceSendMessage(
targetId: toChatUsername,
filePath: filePath,
duration: duration
duration: duration,
);
//
@ -223,14 +228,14 @@ class IMManager {
print('视频路径: $videoPath');
print('接收用户: $toChatUsername');
print('视频时长: $duration');
//
final message = EMMessage.createVideoSendMessage(
targetId: toChatUsername,
filePath: videoPath,
duration: duration,
);
print('消息创建成功,消息类型: ${message.body.type}');
print('消息体是否为视频: ${message.body is EMVideoMessageBody}');
@ -280,6 +285,22 @@ class IMManager {
return data[userId];
}
///
void _refreshConversationList() {
try {
// ConversationController
if (Get.isRegistered<ConversationController>()) {
final conversationController = Get.find<ConversationController>();
conversationController.refreshConversations();
}
} catch (e) {
// ConversationController
if (Get.isLogEnable) {
Get.log('刷新会话列表失败: $e');
}
}
}
///
void dispose() {
try {

396
pubspec.lock
File diff suppressed because it is too large
View File

Loading…
Cancel
Save