即时红包领取层弹窗加个本地兜底
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 Map<String, num> _claimedAmountByPacketId = {};
|
||||||
static final Set<String> _unavailablePacketIds = {};
|
static final Set<String> _unavailablePacketIds = {};
|
||||||
static final ValueNotifier<int> claimedStateNotifier = ValueNotifier<int>(0);
|
static final ValueNotifier<int> claimedStateNotifier = ValueNotifier<int>(0);
|
||||||
|
static String? _activeDialogPacketId;
|
||||||
|
static DateTime? _activeDialogRequestedAt;
|
||||||
|
|
||||||
final RoomRedPacketUiData data;
|
final RoomRedPacketUiData data;
|
||||||
final List<RoomRedPacketUiData>? dataList;
|
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.dismiss(tag: dialogTag);
|
||||||
SmartDialog.show(
|
SmartDialog.show(
|
||||||
tag: dialogTag,
|
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
|
@override
|
||||||
State<RoomRedPacketOpenDialog> createState() =>
|
State<RoomRedPacketOpenDialog> createState() =>
|
||||||
_RoomRedPacketOpenDialogState();
|
_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/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_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_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';
|
import 'package:yumi/ui_kit/widgets/room/red_packet/room_red_packet_rule_page.dart';
|
||||||
|
|
||||||
class RoomRedPacketSendPanel extends StatefulWidget {
|
class RoomRedPacketSendPanel extends StatefulWidget {
|
||||||
@ -737,11 +739,30 @@ class _RoomRedPacketSendPanelState extends State<RoomRedPacketSendPanel> {
|
|||||||
priority: 1000,
|
priority: 1000,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
if (!isDelayedPacket) {
|
||||||
|
_showImmediateSentRedPacketDialog(payload);
|
||||||
|
}
|
||||||
debugPrint(
|
debugPrint(
|
||||||
'[RoomRedPacket][SendFallback] inserted local chat/floating packetId=$packetId roomId=$roomId',
|
'[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() {
|
void _showInsufficientBalanceRechargeSheet() {
|
||||||
SmartDialog.dismiss(tag: RoomRedPacketSendPanel.dialogTag);
|
SmartDialog.dismiss(tag: RoomRedPacketSendPanel.dialogTag);
|
||||||
_RoomRedPacketRechargeSheet.show(context);
|
_RoomRedPacketRechargeSheet.show(context);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user