import 'package:agora_rtc_engine/agora_rtc_engine.dart'; import 'package:aslan/chatvibe_ui/components/at_debounce_widget.dart'; 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/chatvibe_ui/widgets/room/room_menu_dialog.dart'; import 'package:aslan/chatvibe_ui/widgets/room/room_msg_input.dart'; import 'package:provider/provider.dart'; import 'package:aslan/app_localizations.dart'; import 'package:aslan/chatvibe_ui/components/text/at_text.dart'; import 'package:aslan/chatvibe_core/constants/at_global_config.dart'; import 'package:aslan/chatvibe_core/utilities/at_lk_dialog_util.dart'; import 'package:aslan/chatvibe_core/utilities/at_room_utils.dart'; import 'package:aslan/chatvibe_data/sources/local/user_manager.dart'; import 'package:aslan/chatvibe_managers/rtc_manager.dart'; import 'package:aslan/chatvibe_managers/rtm_manager.dart'; import 'package:aslan/chatvibe_features/gift/gift_page.dart'; import 'package:aslan/chatvibe_ui/widgets/msg/bottom_message_conversation_list_page.dart'; import 'package:aslan/chatvibe_ui/widgets/room/emoji/room_emoji_page.dart'; import 'package:aslan/chatvibe_ui/widgets/room/game/room_game_list_page.dart'; class RoomBottomWidget extends StatefulWidget { @override _RoomBottomWidgetState createState() => _RoomBottomWidgetState(); } class _RoomBottomWidgetState extends State { int roomMenuStime = 0; @override Widget build(BuildContext context) { return Stack( alignment: Alignment.center, children: [ Container( height: 55.w, margin: EdgeInsetsDirectional.only(start: 15.w), child: Row( children: [ Container( alignment: Alignment.center, width: 95.w, padding: EdgeInsets.symmetric(vertical: 4.w), decoration: BoxDecoration( image: DecorationImage( image: AssetImage( "atu_images/room/at_icon_room_input.png", ), ), ), child: Row( children: [ SizedBox(width: 5.w), Image.asset( "atu_images/room/at_icon_room_input_t.png", width: 22.w, height: 22.w, ), ATDebounceWidget( child: text( ATAppLocalizations.of(context)!.sayHi, fontSize: 15.sp, fontWeight: FontWeight.w600, ), onTap: () { if (ATRoomUtils.touristCanMsg(context)) { Navigator.push( context, PopRoute(child: RoomMsgInput()), ); } }, ), ], ), ), SizedBox(width: 10.w), ATDebounceWidget( child: Image.asset( "atu_images/room/at_icon_emoji.png", width: 30.w, height: 30.w, ), onTap: () { if (ATRoomUtils.touristCanMsg(context)) { SmartDialog.show( tag: "showRoomEmojiPage", alignment: Alignment.bottomCenter, debounce: true, animationType: SmartAnimationType.fade, maskColor: Colors.transparent, clickMaskDismiss: true, builder: (_) { return RoomEmojiPage(); }, ); } }, ), Spacer(), Consumer( builder: (context, ref, child) { return _mic(ref); }, ), SizedBox(width: 10.w), GestureDetector( child: Image.asset( "atu_images/room/at_icon_botton_game.png", width: 30.w, height: 30.w, fit: BoxFit.contain, ), onTap: () { showBottomInBottomDialog(context, RoomGameListPage()); }, ), SizedBox(width: 10.w), GestureDetector( child: Image.asset( "atu_images/room/at_icon_botton_menu.png", width: 30.w, height: 30.w, fit: BoxFit.contain, ), onTap: () { SmartDialog.show( tag: "showRoomMenuDialog", alignment: Alignment.bottomCenter, debounce: true, animationType: SmartAnimationType.fade, maskColor: Colors.transparent, clickMaskDismiss: true, builder: (_) { return RoomMenuDialog(roomMenuStime, (eTime) { roomMenuStime = eTime; }); }, ); }, ), SizedBox(width: 15.w), ], ), ), PositionedDirectional( bottom: 8.w, child: ATDebounceWidget( onTap: () { SmartDialog.show( tag: "showGiftControl", alignment: Alignment.bottomCenter, maskColor: Colors.transparent, animationType: SmartAnimationType.fade, clickMaskDismiss: true, builder: (_) { return GiftPage(); }, ); }, child: Image.asset( "atu_images/room/at_icon_botton_gift.png", width: 45.w, height: 45.w, fit: BoxFit.contain, ), ), ), ], ); } _mic(RtcProvider provider) { ///默认不显示 bool show = false; ///在麦上 provider.roomWheatMap.forEach((k, v) { if (v.user?.id == AccountStorage().getCurrentUser()?.userProfile?.id) { show = true; } }); return Visibility( visible: show, child: GestureDetector( behavior: HitTestBehavior.opaque, onTap: () { setState(() { provider.isMic = !provider.isMic; ///没被禁麦才显示 provider.roomWheatMap.forEach((k, v) { if (v.user?.id == AccountStorage().getCurrentUser()?.userProfile?.id && !provider.roomWheatMap[k]!.micMute!) { if (!provider.isMic) { Provider.of( context, listen: false, ).engine?.adjustRecordingSignalVolume(100); Provider.of( context, listen: false, ).engine?.setClientRole( role: ClientRoleType.clientRoleBroadcaster, ); } else { if (Provider.of( context, listen: false, ).isMusicPlaying) { Provider.of( context, listen: false, ).engine?.adjustRecordingSignalVolume(0); Provider.of( context, listen: false, ).engine?.setClientRole( role: ClientRoleType.clientRoleBroadcaster, ); Provider.of( context, listen: false, ).engine?.muteLocalAudioStream(false); } else { Provider.of( context, listen: false, ).engine?.setClientRole( role: ClientRoleType.clientRoleAudience, ); Provider.of( context, listen: false, ).engine?.muteLocalAudioStream(provider.isMic); } } } }); }); }, child: Padding( padding: EdgeInsets.only(right: 12.w), child: Container( width: 30.w, height: 30.w, alignment: Alignment.center, // decoration: BoxDecoration( // color: Colors.white.withOpacity(0.2), shape: BoxShape.circle // ), child: Image.asset( "atu_images/room/${provider.isMic ? 'at_icon_botton_mic_close' : 'at_icon_botton_mic_open'}.png", width: 30.w, fit: BoxFit.fill, gaplessPlayback: true, ), ), ), ), ); } }