aslan-flutter/lib/chatvibe_ui/widgets/room/room_user_card_setting.dart
2026-07-01 18:25:58 +08:00

171 lines
5.5 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:aslan/app_localizations.dart';
import 'package:aslan/chatvibe_ui/widgets/room/set_room_role_page.dart';
import 'package:provider/provider.dart';
import 'package:aslan/chatvibe_ui/components/dialog/dialog_base.dart';
import 'package:aslan/chatvibe_core/constants/at_screen.dart';
import 'package:aslan/chatvibe_core/utilities/at_lk_dialog_util.dart';
import 'package:aslan/chatvibe_domain/models/res/room_user_card_res.dart';
import 'package:aslan/chatvibe_managers/rtc_manager.dart';
import '../../../chatvibe_data/models/enum/at_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(ATAppLocalizations.of(context)!.removeTheMic, null, () {
Navigator.of(context).pop();
Provider.of<RtcProvider>(
context,
listen: false,
).killXiaMai(widget.userCardInfo?.userProfile?.id ?? "");
}),
);
} else {
if (widget.userCardInfo?.roomRole != ATRoomRolesType.ADMIN.name &&
widget.userCardInfo?.roomRole != ATRoomRolesType.HOMEOWNER.name) {
list.add(
_item(ATAppLocalizations.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(ATAppLocalizations.of(context)!.setUpAnIdentity, null, () {
Navigator.of(context).pop();
showCenterDialog(context, SetRoomRolePage(widget.userCardInfo));
}),
);
}
if (widget.userCardInfo?.roomRole != ATRoomRolesType.ADMIN.name &&
widget.userCardInfo?.roomRole != ATRoomRolesType.HOMEOWNER.name) {
list.add(
_item(ATAppLocalizations.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(ATAppLocalizations.of(context)!.cancel, null, () {
Navigator.of(context).pop();
}),
);
list.add(SizedBox(height: 10.w));
return SafeArea(
child: Container(
width: ScreenUtil().screenWidth,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topRight: Radius.circular(15.w),
topLeft: Radius.circular(15.w),
),
color: Colors.white,
//gradient: getLinearGradient([0xff5E12A8, 0xff000000], opacity: 0.9),
),
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 == ATAppLocalizations.of(context)!.cancel
? BoxDecoration(
color: Color(0xffF2F2F2),
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: msg == 'Cancel' ? Color(0xffB1B1B1) : Colors.black,
fontWeight: FontWeight.w400,
decoration: TextDecoration.none,
),
),
),
],
),
),
],
),
);
}
}