diff --git a/lib/controller/message/chat_controller.dart b/lib/controller/message/chat_controller.dart index 122616e..2588f13 100644 --- a/lib/controller/message/chat_controller.dart +++ b/lib/controller/message/chat_controller.dart @@ -38,7 +38,7 @@ class ChatController extends GetxController { // 视频发送状态 final RxBool isSendingVideo = RxBool(false); final RxString sendingStatus = RxString(''); - + var isDialogShowing = false.obs; // 语音发送状态(防止重复发送) final RxBool isSendingVoice = RxBool(false); @@ -121,6 +121,10 @@ class ChatController extends GetxController { } } + void setDialogDismiss(bool flag){ + isDialogShowing.value = flag; + } + /// 订阅用户在线状态(实时接收状态变化) Future subscribeUserPresence() async { try { diff --git a/lib/pages/discover/live_room_page.dart b/lib/pages/discover/live_room_page.dart index e8e7bc9..67e522d 100644 --- a/lib/pages/discover/live_room_page.dart +++ b/lib/pages/discover/live_room_page.dart @@ -246,7 +246,7 @@ class _LiveRoomPageState extends State { return Obx(() { return PopScope( canPop: !_roomController.isDialogShowing.value, - onPopInvokedWithResult: (bool didPop, Object? result) async { + onPopInvokedWithResult: (bool didPop, Object? result) { // SmartDialog.dismiss(); // print('256>22>>' + didPop.toString()); // if (didPop) return; diff --git a/lib/pages/message/chat_page.dart b/lib/pages/message/chat_page.dart index 39d2eeb..5d138e4 100644 --- a/lib/pages/message/chat_page.dart +++ b/lib/pages/message/chat_page.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:im_flutter_sdk/im_flutter_sdk.dart'; +import 'package:tdesign_flutter/tdesign_flutter.dart'; import '../../controller/message/call_controller.dart'; import '../../controller/message/chat_controller.dart'; @@ -137,7 +138,7 @@ class _ChatPageState extends State { // 刷新玫瑰余额(参考 LiveRoomPage 的实现) _refreshRoseBalance(); - + _controller.setDialogDismiss(true); SmartDialog.show( builder: (context) { return ChatGiftPopup( @@ -154,7 +155,10 @@ class _ChatPageState extends State { }, alignment: Alignment.bottomCenter, animationType: SmartAnimationType.centerFade_otherSlide, - maskColor: Colors.black.withOpacity(0.5), + maskColor: TDTheme.of(context).fontGyColor2, + onDismiss: () { + _controller.setDialogDismiss(false); + }, maskWidget: GestureDetector( onTap: () => SmartDialog.dismiss(), child: Container(color: Colors.transparent), @@ -179,12 +183,10 @@ class _ChatPageState extends State { } // 显示通话类型选择弹框 - void _showCallTypeSelectionDialog( - ChatController controller, { - List? products, - }) { + void _showCallTypeSelectionDialog(ChatController controller, {List? products}) { // 隐藏键盘 FocusScope.of(context).unfocus(); + _controller.setDialogDismiss(true); SmartDialog.show( builder: (context) { return CallTypeSelectionDialog( @@ -225,7 +227,10 @@ class _ChatPageState extends State { }, alignment: Alignment.bottomCenter, animationType: SmartAnimationType.centerFade_otherSlide, - maskColor: Colors.black.withOpacity(0.5), + maskColor: TDTheme.of(context).fontGyColor2, + onDismiss: () { + _controller.setDialogDismiss(false); + }, maskWidget: GestureDetector( onTap: () => SmartDialog.dismiss(), child: Container(color: Colors.transparent), @@ -238,13 +243,18 @@ class _ChatPageState extends State { return GetBuilder( init: _controller, builder: (controller) { - return WillPopScope( - onWillPop: () async { + return PopScope( + canPop: !controller.isDialogShowing.value, + onPopInvokedWithResult: (bool didPop, Object? result) async { // 退出页面时停止播放并销毁播放器 + if (controller.isDialogShowing.value) { + SmartDialog.dismiss(); + return; // 阻止页面返回 + } await VoicePlayerManager.instance.stop(); - // 关闭礼物弹框 - SmartDialog.dismiss(); - return true; + if (!didPop) { + Get.back(); + } }, child: Scaffold( backgroundColor: Color(0xffF5F5F5), @@ -719,9 +729,13 @@ class _ChatPageState extends State { onTap: () { // 隐藏键盘 FocusScope.of(context).unfocus(); + _controller.setDialogDismiss(true); SmartDialog.show( alignment: Alignment.bottomCenter, - maskColor: Colors.black.withOpacity(0.5), + maskColor: TDTheme.of(context).fontGyColor2, + onDismiss: () { + _controller.setDialogDismiss(false); + }, builder: (_) => const LiveRechargePopup(), ); },