diff --git a/lib/controller/discover/room_controller.dart b/lib/controller/discover/room_controller.dart index 6fe806c..0468175 100644 --- a/lib/controller/discover/room_controller.dart +++ b/lib/controller/discover/room_controller.dart @@ -23,6 +23,7 @@ import '../../pages/mine/real_name_page.dart'; import '../../pages/setting/match_spread_page.dart'; import '../../widget/live/live_recharge_popup.dart'; import '../message/call_controller.dart'; +import 'discover_controller.dart'; import 'svga_player_manager.dart'; // 当前角色 @@ -262,6 +263,11 @@ class RoomController extends GetxController with WidgetsBindingObserver { }; final response = await _networkService.rtcApi.connectRtcChannel(data); if (!response.data.isSuccess) { + // 刷新 DiscoverController.loadRtcChannelPage + if (Get.isRegistered()) { + final discoverController = Get.find(); + discoverController.loadRtcChannelPage(); + } SmartDialog.showToast(response.data.message); return; } @@ -276,6 +282,8 @@ class RoomController extends GetxController with WidgetsBindingObserver { } else { await RTCManager.instance.publishAudio(); } + // 上麦成功后刷新连麦卡片数据 + await getUserPropLinkMicCard(); RtcSeatUserInfo userInfo = RtcSeatUserInfo( uid: rtcChannel.value?.uid, miId: GlobalData().userData?.id ?? '', diff --git a/lib/controller/message/call_controller.dart b/lib/controller/message/call_controller.dart index bc94f03..c2c88b2 100644 --- a/lib/controller/message/call_controller.dart +++ b/lib/controller/message/call_controller.dart @@ -186,6 +186,7 @@ class CallController extends GetxController { } if (!response.data.data!.success && response.data.data!.code == 'E0003') { SmartDialog.showToast('对方忙线中'); + isCreatingChannel.value = false; return null; } rtcChannel.value = response.data.data; diff --git a/lib/network/network_config.dart b/lib/network/network_config.dart index 9cc2447..8d0be35 100644 --- a/lib/network/network_config.dart +++ b/lib/network/network_config.dart @@ -1,8 +1,10 @@ import 'package:dating_touchme_app/controller/global.dart'; import 'package:dating_touchme_app/controller/message/conversation_controller.dart'; +import 'package:dating_touchme_app/controller/discover/discover_controller.dart'; import 'package:dating_touchme_app/controller/discover/room_controller.dart'; import 'package:dating_touchme_app/controller/overlay_controller.dart'; import 'package:dating_touchme_app/im/im_manager.dart'; +import 'package:dating_touchme_app/network/api_urls.dart'; import 'package:dio/dio.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart' hide Response; @@ -100,6 +102,13 @@ class ResponseInterceptor extends Interceptor { _showError("登录已过期,请重新登录"); _handleTokenExpired(); } else { + if(response.realUri.path.contains(ApiUrls.getSwRtcToken)){ + // 调用 DiscoverController.loadRtcChannelPage 刷新频道列表 + if (Get.isRegistered()) { + final discoverController = Get.find(); + discoverController.loadRtcChannelPage(); + } + } // 业务错误 final message = data['message'] ?? '请求失败'; _showError(message); @@ -151,7 +160,6 @@ class ResponseInterceptor extends Interceptor { default: errorMessage = err.message ?? '未知错误'; } - _showError(errorMessage); handler.reject(err); } diff --git a/lib/rtc/rtc_manager.dart b/lib/rtc/rtc_manager.dart index 0e51098..d65474e 100644 --- a/lib/rtc/rtc_manager.dart +++ b/lib/rtc/rtc_manager.dart @@ -238,8 +238,22 @@ class RTCManager { RtcConnection connection, ConnectionStateType state, ConnectionChangedReasonType reason, - ) { - print('连接状态改变:$state,原因:$reason'); + ) async{ + if(state == ConnectionStateType.connectionStateFailed && + reason == ConnectionChangedReasonType.connectionChangedBannedByServer){ + if (Get.isRegistered()) { + final roomController = Get.find(); + // 判断不是主播(从 RoomController.currentRole 获取角色) + final isNotBroadcaster = roomController.currentRole != CurrentRole.broadcaster; + if (isNotBroadcaster) { + await roomController.leaveChannel(); + // 调用 LiveChatMessageService 处理结束直播消息 + LiveChatMessageService.instance.handleEndLiveMessage(); + } + } + return; + } + print('连接状态改变:$state,原因:$reason, localUid: ${connection.localUid}'); if (onConnectionStateChanged != null) { onConnectionStateChanged!(connection, state, reason); } diff --git a/lib/widget/message/chat_input_bar.dart b/lib/widget/message/chat_input_bar.dart index 1bc1875..f761f96 100644 --- a/lib/widget/message/chat_input_bar.dart +++ b/lib/widget/message/chat_input_bar.dart @@ -174,6 +174,9 @@ class _ChatInputBarState extends State { fontSize: 14.sp, color: Colors.grey, ), + contentPadding: EdgeInsets.only( + bottom: 10 + ), ), inputFormatters: [ // 可以添加其他格式化器,但不要添加过滤Unicode的规则