import 'package:dating_touchme_app/controller/discover/room_controller.dart'; import 'package:dating_touchme_app/generated/assets.dart'; import 'package:dating_touchme_app/model/rtc/rtc_channel_detail.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; /// 解除连麦对话框 class DisconnectMicDialog extends StatelessWidget { const DisconnectMicDialog({super.key}); @override Widget build(BuildContext context) { final roomController = Get.find(); return Dialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12.w), ), child: Container( padding: EdgeInsets.all(20.w), child: Column( mainAxisSize: MainAxisSize.min, children: [ // 标题栏 Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( '解除连麦', style: TextStyle( fontSize: 18.sp, fontWeight: FontWeight.bold, color: Colors.black87, ), ), GestureDetector( onTap: () => SmartDialog.dismiss(), child: Icon( Icons.close, size: 24.w, color: Colors.grey, ), ), ], ), SizedBox(height: 20.w), // 嘉宾列表 Obx(() { final maleInfo = roomController.rtcChannelDetail.value?.maleInfo; final femaleInfo = roomController.rtcChannelDetail.value?.femaleInfo; // 如果没有嘉宾在连麦 if (maleInfo == null && femaleInfo == null) { return Padding( padding: EdgeInsets.symmetric(vertical: 20.w), child: Text( '暂无嘉宾连麦', style: TextStyle( fontSize: 14.sp, color: Colors.grey, ), ), ); } return Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ // 男嘉宾 if (maleInfo != null) Expanded( child: _buildGuestItem( context: context, userInfo: maleInfo, roomController: roomController, isMale: true, ), ), if (maleInfo != null && femaleInfo != null) SizedBox(width: 20.w), // 女嘉宾 if (femaleInfo != null) Expanded( child: _buildGuestItem( context: context, userInfo: femaleInfo, roomController: roomController, isMale: false, ), ), ], ); }), SizedBox(height: 10.w), ], ), ), ); } /// 构建嘉宾项 Widget _buildGuestItem({ required BuildContext context, required RtcSeatUserInfo userInfo, required RoomController roomController, required bool isMale, }) { // 判断当前嘉宾是否还在连麦 final isConnected = userInfo.isMicrophoneOn; return Column( children: [ // 头像 ClipOval( child: Image.network( userInfo.profilePhoto, width: 60.w, height: 60.w, fit: BoxFit.cover, errorBuilder: (context, error, stackTrace) { return Image.asset( Assets.imagesUserAvatar, width: 60.w, height: 60.w, ); }, ), ), SizedBox(height: 10.w), // 昵称 Text( userInfo.nickName, style: TextStyle( fontSize: 14.sp, color: Colors.black87, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), SizedBox(height: 10.w), // 解除连麦按钮 GestureDetector( onTap: isConnected ? () async { // 解除连麦 await roomController.kickingRtcChannelUser( channelId: roomController.rtcChannelDetail.value!.channelId, kickingUId: userInfo.uid ?? 0); SmartDialog.dismiss(); } : null, child: Container( padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 8.w), decoration: BoxDecoration( color: isConnected ? const Color(0xFF8B5CF6) : Colors.grey[300], borderRadius: BorderRadius.circular(20.w), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Image.asset( Assets.imagesMicOff, width: 14.w, color: isConnected ? Colors.white : Colors.grey[600], ), SizedBox(width: 4.w), Text( isConnected ? '解除连麦' : '已解除连麦', style: TextStyle( fontSize: 12.sp, color: isConnected ? Colors.white : Colors.grey[600], ), ), ], ), ), ), ], ); } }