Browse Source

fix(rtc): 修复踢人功能接口路径并完善相关逻辑

- 修正 API URL 中重复的 '/user' 路径段
- 更新 kickingRtcChannelUser 方法参数类型及调用方式
- 在 RoomController 中实现完整的踢人消息处理流程
- 添加通过 RTM 广播踢人事件的功能
- 优化被踢用户和其他用户的界面反馈逻辑
- 修复 live_room_page 页面返回时 overlay 显示状态错误的问题
- 移除旧版断开麦克风连接的冗余代码
ios
Jolie 3 months ago
parent
commit
bc47f9889c
5 changed files with 50 additions and 21 deletions
  1. 45
      lib/controller/discover/room_controller.dart
  2. 2
      lib/network/api_urls.dart
  3. 2
      lib/network/rtc_api.g.dart
  4. 2
      lib/pages/discover/live_room_page.dart
  5. 20
      lib/widget/live/disconnect_mic_dialog.dart

45
lib/controller/discover/room_controller.dart

@ -538,6 +538,32 @@ class RoomController extends GetxController with WidgetsBindingObserver {
} catch (e) {
print('❌ 处理礼物消息失败: $e');
}
} else if (message['type'] == 'kick_user') {
//
try {
final kickingUId = message['kickingUId'];
final operatorName = message['operatorName']?.toString() ?? '主持人';
print('✅ 收到踢人消息: 被踢用户ID $kickingUId');
//
if (rtcChannel.value?.uid == kickingUId) {
//
SmartDialog.showToast('您已被$operatorName踢出房间');
await leaveChannel();
//
Get.back();
} else {
//
final channelName = RTCManager.instance.currentChannelId;
if (channelName != null && channelName.isNotEmpty) {
await fetchRtcChannelDetail(channelName);
}
print('✅ 其他用户收到踢人消息,已刷新房间详情');
}
} catch (e) {
print('❌ 处理踢人消息失败: $e');
}
}
}
@ -555,7 +581,7 @@ class RoomController extends GetxController with WidgetsBindingObserver {
/// RTC
Future<void> kickingRtcChannelUser({
required int channelId,
required String channelId,
required int kickingUId,
}) async {
try {
@ -570,9 +596,24 @@ class RoomController extends GetxController with WidgetsBindingObserver {
if (response.data.isSuccess) {
SmartDialog.showToast('已踢出用户');
//
// RTM
final channelName = RTCManager.instance.currentChannelId;
if (channelName != null && channelName.isNotEmpty) {
final messageData = {
'type': 'kick_user',
'kickingUId': kickingUId,
'operatorId': GlobalData().userData?.id ?? '',
'operatorName': GlobalData().userData?.nickName ?? '',
};
await RTMManager.instance.publishChannelMessage(
channelName: channelName,
message: json.encode(messageData),
);
print('✅ 踢人消息已发送: 踢出用户ID $kickingUId');
//
await fetchRtcChannelDetail(channelName);
}
} else {

2
lib/network/api_urls.dart

@ -107,5 +107,5 @@ class ApiUrls {
static const String submitMatchmakerOrder = 'dating-agency-mall/user/submit/matchmaker-order';
static const String kickingRtcChannelUser =
'dating-agency-chat-audio/user/user//kicking/rtc-channel-user';
'dating-agency-chat-audio/user/kicking/rtc-channel-user';
}

2
lib/network/rtc_api.g.dart

@ -480,7 +480,7 @@ class _RtcApi implements RtcApi {
Options(method: 'POST', headers: _headers, extra: _extra)
.compose(
_dio.options,
'dating-agency-chat-audio/user/user//kicking/rtc-channel-user',
'dating-agency-chat-audio/user/kicking/rtc-channel-user',
queryParameters: queryParameters,
data: _data,
)

2
lib/pages/discover/live_room_page.dart

@ -107,7 +107,7 @@ class _LiveRoomPageState extends State<LiveRoomPage> {
Widget build(BuildContext context) {
return PopScope(
onPopInvokedWithResult: (bool didPop, Object? result) async {
_overlayController.hide();
_overlayController.show();
Get.back();
},
child: Scaffold(

20
lib/widget/live/disconnect_mic_dialog.dart

@ -145,7 +145,10 @@ class DisconnectMicDialog extends StatelessWidget {
onTap: isConnected
? () async {
//
await _disconnectMic(roomController, isMale);
await roomController.kickingRtcChannelUser(
channelId: roomController.rtcChannelDetail.value!.channelId,
kickingUId: userInfo.uid ?? 0);
SmartDialog.dismiss();
}
: null,
child: Container(
@ -177,20 +180,5 @@ class DisconnectMicDialog extends StatelessWidget {
],
);
}
///
Future<void> _disconnectMic(RoomController roomController, bool isMale) async {
// -
final currentDetail = roomController.rtcChannelDetail.value;
if (currentDetail != null) {
final newDetail = RtcChannelDetail(
channelId: currentDetail.channelId,
anchorInfo: currentDetail.anchorInfo,
maleInfo: isMale ? null : currentDetail.maleInfo,
femaleInfo: !isMale ? null : currentDetail.femaleInfo,
);
roomController.rtcChannelDetail.value = newDetail;
}
}
}
Loading…
Cancel
Save