From 829914c58c5890f3ab34896313001dc82047b8fb Mon Sep 17 00:00:00 2001 From: roxy Date: Mon, 11 May 2026 13:39:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=B3=E6=97=B6=E7=BA=A2=E5=8C=85=E9=A2=86?= =?UTF-8?q?=E5=8F=96=E5=B1=82=E5=BC=B9=E7=AA=97=E5=8A=A0=E4=B8=AA=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0=E5=85=9C=E5=BA=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../room_red_packet_open_dialog.dart | 19 +++++++++++++++++ .../room_red_packet_send_panel.dart | 21 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/lib/ui_kit/widgets/room/red_packet/room_red_packet_open_dialog.dart b/lib/ui_kit/widgets/room/red_packet/room_red_packet_open_dialog.dart index 7782951..c45428c 100644 --- a/lib/ui_kit/widgets/room/red_packet/room_red_packet_open_dialog.dart +++ b/lib/ui_kit/widgets/room/red_packet/room_red_packet_open_dialog.dart @@ -26,6 +26,8 @@ class RoomRedPacketOpenDialog extends StatefulWidget { static final Map _claimedAmountByPacketId = {}; static final Set _unavailablePacketIds = {}; static final ValueNotifier claimedStateNotifier = ValueNotifier(0); + static String? _activeDialogPacketId; + static DateTime? _activeDialogRequestedAt; final RoomRedPacketUiData data; final List? dataList; @@ -66,6 +68,12 @@ class RoomRedPacketOpenDialog extends StatefulWidget { } } + final nextPacketId = packets[initialIndex].packetId.trim(); + if (_isDuplicateDialogRequest(nextPacketId)) { + return; + } + _activeDialogPacketId = nextPacketId; + _activeDialogRequestedAt = DateTime.now(); SmartDialog.dismiss(tag: dialogTag); SmartDialog.show( tag: dialogTag, @@ -208,6 +216,17 @@ class RoomRedPacketOpenDialog extends StatefulWidget { } } + static bool _isDuplicateDialogRequest(String packetId) { + if (packetId.isEmpty || _activeDialogPacketId != packetId) { + return false; + } + final requestedAt = _activeDialogRequestedAt; + final isRecent = + requestedAt != null && + DateTime.now().difference(requestedAt) < const Duration(seconds: 1); + return isRecent || SmartDialog.checkExist(tag: dialogTag); + } + @override State createState() => _RoomRedPacketOpenDialogState(); diff --git a/lib/ui_kit/widgets/room/red_packet/room_red_packet_send_panel.dart b/lib/ui_kit/widgets/room/red_packet/room_red_packet_send_panel.dart index 5a27833..afe018c 100644 --- a/lib/ui_kit/widgets/room/red_packet/room_red_packet_send_panel.dart +++ b/lib/ui_kit/widgets/room/red_packet/room_red_packet_send_panel.dart @@ -29,6 +29,8 @@ import 'package:yumi/ui_kit/components/sc_tts.dart'; import 'package:yumi/ui_kit/widgets/room/room_msg_item.dart'; import 'package:yumi/ui_kit/widgets/room/red_packet/room_red_packet_error.dart'; import 'package:yumi/ui_kit/widgets/room/red_packet/room_red_packet_history_page.dart'; +import 'package:yumi/ui_kit/widgets/room/red_packet/room_red_packet_models.dart'; +import 'package:yumi/ui_kit/widgets/room/red_packet/room_red_packet_open_dialog.dart'; import 'package:yumi/ui_kit/widgets/room/red_packet/room_red_packet_rule_page.dart'; class RoomRedPacketSendPanel extends StatefulWidget { @@ -737,11 +739,30 @@ class _RoomRedPacketSendPanelState extends State { priority: 1000, ), ); + if (!isDelayedPacket) { + _showImmediateSentRedPacketDialog(payload); + } debugPrint( '[RoomRedPacket][SendFallback] inserted local chat/floating packetId=$packetId roomId=$roomId', ); } + void _showImmediateSentRedPacketDialog(Map payload) { + final dialogData = RoomRedPacketUiData.fromJson(payload); + if (!dialogData.hasPacketId || + !dialogData.isOpenable || + RoomRedPacketOpenDialog.isClaimedLocally(dialogData.packetId)) { + return; + } + WidgetsBinding.instance.addPostFrameCallback((_) { + final currentContext = navigatorKey.currentState?.context; + if (currentContext == null || !currentContext.mounted) { + return; + } + RoomRedPacketOpenDialog.show(currentContext, dialogData); + }); + } + void _showInsufficientBalanceRechargeSheet() { SmartDialog.dismiss(tag: RoomRedPacketSendPanel.dialogTag); _RoomRedPacketRechargeSheet.show(context);