|
|
@ -3,7 +3,9 @@ import 'dart:typed_data'; |
|
|
import 'package:agora_rtm/agora_rtm.dart'; |
|
|
import 'package:agora_rtm/agora_rtm.dart'; |
|
|
import 'package:dating_touchme_app/controller/discover/room_controller.dart'; |
|
|
import 'package:dating_touchme_app/controller/discover/room_controller.dart'; |
|
|
import 'package:dating_touchme_app/controller/global.dart'; |
|
|
import 'package:dating_touchme_app/controller/global.dart'; |
|
|
|
|
|
import 'package:dating_touchme_app/controller/overlay_controller.dart'; |
|
|
import 'package:dating_touchme_app/model/live/live_chat_message.dart'; |
|
|
import 'package:dating_touchme_app/model/live/live_chat_message.dart'; |
|
|
|
|
|
import 'package:dating_touchme_app/pages/discover/live_end_page.dart'; |
|
|
import 'package:dating_touchme_app/rtc/rtc_manager.dart'; |
|
|
import 'package:dating_touchme_app/rtc/rtc_manager.dart'; |
|
|
import 'package:dating_touchme_app/rtc/rtm_manager.dart'; |
|
|
import 'package:dating_touchme_app/rtc/rtm_manager.dart'; |
|
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; |
|
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; |
|
|
@ -64,6 +66,13 @@ class LiveChatMessageService { |
|
|
final messageText = _parseMessageContent(event.message); |
|
|
final messageText = _parseMessageContent(event.message); |
|
|
final messageData = json.decode(messageText) as Map<String, dynamic>; |
|
|
final messageData = json.decode(messageText) as Map<String, dynamic>; |
|
|
print('📥 收到消息: $messageData'); |
|
|
print('📥 收到消息: $messageData'); |
|
|
|
|
|
|
|
|
|
|
|
// 处理结束直播消息 |
|
|
|
|
|
if (messageData['type'] == 'end_live') { |
|
|
|
|
|
_handleEndLiveMessage(); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 只处理聊天消息类型 |
|
|
// 只处理聊天消息类型 |
|
|
if (messageData['type'] == 'chat_message') { |
|
|
if (messageData['type'] == 'chat_message') { |
|
|
final chatMessage = LiveChatMessage.fromJson(messageData); |
|
|
final chatMessage = LiveChatMessage.fromJson(messageData); |
|
|
@ -80,6 +89,30 @@ class LiveChatMessageService { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// 处理结束直播消息 |
|
|
|
|
|
void _handleEndLiveMessage() { |
|
|
|
|
|
try { |
|
|
|
|
|
// 检查 overlay 是否显示,如果显示则关闭 |
|
|
|
|
|
if (Get.isRegistered<OverlayController>()) { |
|
|
|
|
|
final overlayController = Get.find<OverlayController>(); |
|
|
|
|
|
if (overlayController.showOverlay.value) { |
|
|
|
|
|
overlayController.hide(); |
|
|
|
|
|
print('✅ 已关闭 overlay 小窗'); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 检查当前是否在 LiveRoomPage,如果是则跳转到 live_end_page |
|
|
|
|
|
final currentRoute = Get.currentRoute; |
|
|
|
|
|
if (currentRoute == '/LiveRoomPage' || currentRoute.contains('LiveRoomPage')) { |
|
|
|
|
|
Get.off(() => const LiveEndPage()); |
|
|
|
|
|
print('✅ 已跳转到直播结束页面'); |
|
|
|
|
|
} |
|
|
|
|
|
} catch (e) { |
|
|
|
|
|
print('❌ 处理结束直播消息失败: $e'); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
/// 解析消息内容(支持 String 和 Uint8List) |
|
|
/// 解析消息内容(支持 String 和 Uint8List) |
|
|
String _parseMessageContent(dynamic message) { |
|
|
String _parseMessageContent(dynamic message) { |
|
|
if (message is String) { |
|
|
if (message is String) { |
|
|
|