|
|
@ -4,6 +4,7 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; |
|
|
import 'package:get/get.dart'; |
|
|
import 'package:get/get.dart'; |
|
|
import 'package:im_flutter_sdk/im_flutter_sdk.dart'; |
|
|
import 'package:im_flutter_sdk/im_flutter_sdk.dart'; |
|
|
|
|
|
|
|
|
|
|
|
import '../../im/im_manager.dart'; |
|
|
import 'chat_controller.dart'; |
|
|
import 'chat_controller.dart'; |
|
|
|
|
|
|
|
|
/// 通话类型 |
|
|
/// 通话类型 |
|
|
@ -282,24 +283,22 @@ class CallManager extends GetxController { |
|
|
); |
|
|
); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 否则直接通过 IMManager 发送 |
|
|
|
|
|
final callInfoMap = <String, dynamic>{ |
|
|
|
|
|
|
|
|
// 否则直接通过 IMManager 发送自定义消息 |
|
|
|
|
|
final callParams = <String, String>{ |
|
|
'callType': callType, |
|
|
'callType': callType, |
|
|
'callStatus': callStatus, |
|
|
'callStatus': callStatus, |
|
|
}; |
|
|
}; |
|
|
if (callDuration != null) { |
|
|
if (callDuration != null) { |
|
|
callInfoMap['callDuration'] = callDuration; |
|
|
|
|
|
|
|
|
callParams['callDuration'] = callDuration.toString(); |
|
|
} |
|
|
} |
|
|
final callInfoJson = jsonEncode(callInfoMap); |
|
|
|
|
|
final content = '[CALL:]$callInfoJson'; |
|
|
|
|
|
|
|
|
|
|
|
final message = EMMessage.createTxtSendMessage( |
|
|
|
|
|
targetId: targetUserId, |
|
|
|
|
|
content: content, |
|
|
|
|
|
|
|
|
final message = await IMManager.instance.sendCustomMessage( |
|
|
|
|
|
targetUserId, |
|
|
|
|
|
'call', |
|
|
|
|
|
callParams, |
|
|
); |
|
|
); |
|
|
|
|
|
|
|
|
await EMClient.getInstance.chatManager.sendMessage(message); |
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return message != null; |
|
|
} catch (e) { |
|
|
} catch (e) { |
|
|
print('❌ [CallManager] 发送通话消息失败: $e'); |
|
|
print('❌ [CallManager] 发送通话消息失败: $e'); |
|
|
return false; |
|
|
return false; |
|
|
@ -337,9 +336,24 @@ class CallManager extends GetxController { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/// 从消息中解析通话信息 |
|
|
|
|
|
|
|
|
/// 从消息中解析通话信息(支持新格式的自定义消息和旧格式的文本消息) |
|
|
Map<String, dynamic>? _parseCallInfo(EMMessage message) { |
|
|
Map<String, dynamic>? _parseCallInfo(EMMessage message) { |
|
|
try { |
|
|
try { |
|
|
|
|
|
// 新格式:自定义消息 |
|
|
|
|
|
if (message.body.type == MessageType.CUSTOM) { |
|
|
|
|
|
final customBody = message.body as EMCustomMessageBody; |
|
|
|
|
|
if (customBody.event == 'call' && customBody.params != null) { |
|
|
|
|
|
final params = customBody.params!; |
|
|
|
|
|
return { |
|
|
|
|
|
'callType': params['callType'] ?? 'voice', |
|
|
|
|
|
'callStatus': params['callStatus'] ?? 'missed', |
|
|
|
|
|
'callDuration': params['callDuration'] != null |
|
|
|
|
|
? int.tryParse(params['callDuration']!) |
|
|
|
|
|
: null, |
|
|
|
|
|
}; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
// 旧格式:文本消息 |
|
|
if (message.body.type == MessageType.TXT) { |
|
|
if (message.body.type == MessageType.TXT) { |
|
|
final textBody = message.body as EMTextMessageBody; |
|
|
final textBody = message.body as EMTextMessageBody; |
|
|
final content = textBody.content; |
|
|
final content = textBody.content; |
|
|
|