chatapp3-flutter/lib/ui_kit/widgets/room/room_user_card_setting.dart
2026-04-09 21:32:23 +08:00

173 lines
5.7 KiB
Dart

import 'dart:ui' as ui;
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:yumi/app_localizations.dart';
import 'package:yumi/ui_kit/widgets/room/set_room_role_page.dart';
import 'package:provider/provider.dart';
import 'package:yumi/ui_kit/components/dialog/dialog_base.dart';
import 'package:yumi/app/constants/sc_screen.dart';
import 'package:yumi/shared/tools/sc_lk_dialog_util.dart';
import 'package:yumi/shared/business_logic/models/res/room_user_card_res.dart';
import 'package:yumi/services/audio/rtc_manager.dart';
import '../../../shared/data_sources/models/enum/sc_room_roles_type.dart';
class RoomUserCardSetting extends StatefulWidget {
String? roomId;
RoomUserCardRes? userCardInfo;
RoomUserCardSetting({super.key, this.roomId, this.userCardInfo});
@override
_RoomUserCardSettingState createState() => _RoomUserCardSettingState();
}
class _RoomUserCardSettingState extends State<RoomUserCardSetting> {
bool isOnMai = false;
bool micMute = false;
@override
void initState() {
super.initState();
isOnMai =
Provider.of<RtcProvider>(
context,
listen: false,
).userOnMaiInIndex(widget.userCardInfo?.userProfile?.id ?? "") !=
-1;
}
@override
Widget build(BuildContext context) {
List<Widget> list = [];
list.add(SizedBox(height: 10.w));
if (isOnMai) {
if (Provider.of<RtcProvider>(context, listen: false).isFz()) {
///操作的人是房主
list.add(
_item(SCAppLocalizations.of(context)!.removeTheMic, null, () {
Navigator.of(context).pop();
Provider.of<RtcProvider>(
context,
listen: false,
).killXiaMai(widget.userCardInfo?.userProfile?.id ?? "");
}),
);
} else {
if (widget.userCardInfo?.roomRole != SCRoomRolesType.ADMIN.name &&
widget.userCardInfo?.roomRole != SCRoomRolesType.HOMEOWNER.name) {
list.add(
_item(SCAppLocalizations.of(context)!.removeTheMic, null, () {
Navigator.of(context).pop();
Provider.of<RtcProvider>(
context,
listen: false,
).killXiaMai(widget.userCardInfo?.userProfile?.id ?? "");
}),
);
}
}
}
if (Provider.of<RtcProvider>(context, listen: false).isFz()) {
list.add(
_item(SCAppLocalizations.of(context)!.setUpAnIdentity, null, () {
Navigator.of(context).pop();
showCenterDialog(context, SetRoomRolePage(widget.userCardInfo));
}),
);
}
if (widget.userCardInfo?.roomRole != SCRoomRolesType.ADMIN.name &&
widget.userCardInfo?.roomRole != SCRoomRolesType.HOMEOWNER.name) {
list.add(
_item(SCAppLocalizations.of(context)!.kickedOutOfRoom, null, () {
Navigator.of(context).pop();
SmartDialog.show(
tag: "showKickedOutOfRoomDialog",
maskColor: Colors.black26,
alignment: Alignment.center,
animationType: SmartAnimationType.fade,
clickMaskDismiss: true,
builder: (_) {
return KickedOutOfRoomDialog(
roomId: widget.roomId ?? "",
userId: widget.userCardInfo?.userProfile?.id ?? "",
);
},
);
}),
);
}
list.add(
_item(SCAppLocalizations.of(context)!.cancel, null, () {
Navigator.of(context).pop();
}),
);
list.add(SizedBox(height: 10.w));
return SafeArea(
child: ClipRRect(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(12.0),
topRight: Radius.circular(12.0),
),
child: BackdropFilter(
filter: ui.ImageFilter.blur(sigmaX: 15, sigmaY: 15),
child: Container(
width: ScreenUtil().screenWidth,
color: Color(0xff09372E).withOpacity(0.5),
child: Column(children: list),
),
),
),
);
}
Widget _item(String msg, String? icon, Function onClick) {
return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
onClick();
},
child: Column(
children: <Widget>[
Container(
decoration:
msg == SCAppLocalizations.of(context)!.cancel
? BoxDecoration(
color: Color(0xff18F2B1).withOpacity(0.1),
borderRadius: BorderRadius.all(Radius.circular(32.w)),
)
: null,
width: ScreenUtil().screenWidth * 0.7,
padding: EdgeInsets.symmetric(vertical: 10.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
icon != null
? Image.asset(icon, height: 18.w, width: 18.w)
: Container(),
SizedBox(width: 5.w),
Container(
alignment: Alignment.center,
child: Text(
msg,
style: TextStyle(
fontSize: sp(16),
color:Colors.white,
fontWeight: FontWeight.w400,
decoration: TextDecoration.none,
),
),
),
],
),
),
],
),
);
}
}