即时红包领取层弹窗加个本地兜底
This commit is contained in:
parent
39c5fbf208
commit
829914c58c
@ -26,6 +26,8 @@ class RoomRedPacketOpenDialog extends StatefulWidget {
|
||||
static final Map<String, num> _claimedAmountByPacketId = {};
|
||||
static final Set<String> _unavailablePacketIds = {};
|
||||
static final ValueNotifier<int> claimedStateNotifier = ValueNotifier<int>(0);
|
||||
static String? _activeDialogPacketId;
|
||||
static DateTime? _activeDialogRequestedAt;
|
||||
|
||||
final RoomRedPacketUiData data;
|
||||
final List<RoomRedPacketUiData>? 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<RoomRedPacketOpenDialog> createState() =>
|
||||
_RoomRedPacketOpenDialogState();
|
||||
|
||||
@ -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<RoomRedPacketSendPanel> {
|
||||
priority: 1000,
|
||||
),
|
||||
);
|
||||
if (!isDelayedPacket) {
|
||||
_showImmediateSentRedPacketDialog(payload);
|
||||
}
|
||||
debugPrint(
|
||||
'[RoomRedPacket][SendFallback] inserted local chat/floating packetId=$packetId roomId=$roomId',
|
||||
);
|
||||
}
|
||||
|
||||
void _showImmediateSentRedPacketDialog(Map<String, dynamic> 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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user