keep动画重播问题
This commit is contained in:
parent
faaeeded32
commit
8be5c4c334
@ -499,6 +499,7 @@ class RealTimeCommunicationManager extends ChangeNotifier {
|
||||
_roomEntryEffectTimer = null;
|
||||
_roomRocketLaunchAnimationTimer?.cancel();
|
||||
_roomRocketLaunchAnimationTimer = null;
|
||||
SmartDialog.dismiss(tag: _roomRocketPagLaunchDialogTag);
|
||||
_releaseRoomRocketLaunchTopAvatarNotifier();
|
||||
_roomRocketGiftRefreshTimer?.cancel();
|
||||
_roomRocketGiftRefreshTimer = null;
|
||||
@ -3768,6 +3769,7 @@ class RealTimeCommunicationManager extends ChangeNotifier {
|
||||
_roomEntryEffectTimer = null;
|
||||
_roomRocketLaunchAnimationTimer?.cancel();
|
||||
_roomRocketLaunchAnimationTimer = null;
|
||||
SmartDialog.dismiss(tag: _roomRocketPagLaunchDialogTag);
|
||||
_releaseRoomRocketLaunchTopAvatarNotifier();
|
||||
_roomRocketGiftRefreshTimer?.cancel();
|
||||
_roomRocketGiftRefreshTimer = null;
|
||||
|
||||
@ -136,6 +136,7 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
static const int _roomRocketRewardPendingTtlMs = 120000;
|
||||
static const int _roomRocketRewardProbeTtlMs = 120000;
|
||||
static const int _roomRocketLaunchCountdownRetainMs = 10000;
|
||||
static const int _roomRocketLaunchEffectConsumedTtlMs = 120000;
|
||||
static const Duration _createRoomGroupTimeout = Duration(seconds: 12);
|
||||
static const List<Duration> _roomRocketRewardPopupRetryDelays = [
|
||||
Duration(milliseconds: 700),
|
||||
@ -269,6 +270,8 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
final _pendingRoomRocketCountdownLaunches =
|
||||
<String, RoomRocketLaunchBroadcastMessage>{};
|
||||
final Map<String, Timer> _roomRocketLaunchEffectTimers = <String, Timer>{};
|
||||
final Map<String, int> _consumedRoomRocketLaunchEffectTimes = <String, int>{};
|
||||
final Set<String> _hiddenCurrentRoomRocketLaunchKeys = <String>{};
|
||||
Timer? _roomRocketRewardPopupRetryTimer;
|
||||
Timer? _roomRocketRoomReadyRewardRetryTimer;
|
||||
int get currentLuckGiftBurstPlaybackToken => _luckGiftPushPlaybackToken;
|
||||
@ -2020,8 +2023,10 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
publishRegionBroadcast: true,
|
||||
);
|
||||
} else {
|
||||
_rememberRoomRocketLaunchCountdown(launch);
|
||||
_markRoomRocketRewardProbe(launch.roomId);
|
||||
_rememberRoomRocketLaunchCountdown(
|
||||
launch,
|
||||
suppressReplayAfterDue: true,
|
||||
);
|
||||
_publishRoomRocketRegionBroadcastIfNeeded(launch);
|
||||
}
|
||||
}
|
||||
@ -2038,8 +2043,6 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
if (!launch.isValid) {
|
||||
return;
|
||||
}
|
||||
_rememberRoomRocketLaunchCountdown(launch);
|
||||
|
||||
var isCurrentRoom = false;
|
||||
var isCurrentVisibleRoom = false;
|
||||
final currentContext = context;
|
||||
@ -2060,11 +2063,19 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
rtcProvider: rtcProvider,
|
||||
launch: launch,
|
||||
);
|
||||
} else {
|
||||
_rememberRoomRocketLaunchCountdown(
|
||||
launch,
|
||||
suppressReplayAfterDue: true,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!isCurrentVisibleRoom) {
|
||||
if (!isCurrentRoom) {
|
||||
_rememberRoomRocketLaunchCountdown(launch);
|
||||
}
|
||||
if (!isCurrentVisibleRoom && !isCurrentRoom) {
|
||||
_markRoomRocketRewardProbe(launch.roomId);
|
||||
}
|
||||
if (isCurrentRoom && !isCurrentVisibleRoom && !isRegionBroadcast) {
|
||||
@ -2141,10 +2152,13 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
final resumedLaunch = _resumeRoomRocketLaunchForCurrentRoom(
|
||||
normalizedRoomId,
|
||||
);
|
||||
if (pending == null && !hasProbe) {
|
||||
final pendingAfterResume = _pendingRoomRocketRewardPopups[normalizedRoomId];
|
||||
final hasProbeAfterResume =
|
||||
_recentRoomRocketRewardProbeTimes[normalizedRoomId] != null;
|
||||
if (pendingAfterResume == null && !hasProbeAfterResume) {
|
||||
return;
|
||||
}
|
||||
if (!resumedLaunch && pending == null && attempt == 0) {
|
||||
if (!resumedLaunch && pendingAfterResume == null && attempt == 0) {
|
||||
_scheduleRoomRocketReadyRewardRetry(normalizedRoomId, attempt);
|
||||
return;
|
||||
}
|
||||
@ -2156,7 +2170,7 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
_showRoomRocketRewardPopupDialog(
|
||||
normalizedRoomId,
|
||||
initialRoomRecords:
|
||||
pending?.initialRoomRecords ??
|
||||
pendingAfterResume?.initialRoomRecords ??
|
||||
const <SCRoomRocketRewardRecordRes>[],
|
||||
),
|
||||
);
|
||||
@ -2223,15 +2237,18 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
void _clearRoomRocketRewardFallbackState() {
|
||||
_pendingRoomRocketRewardPopups.clear();
|
||||
_recentRoomRocketRewardProbeTimes.clear();
|
||||
_consumedRoomRocketLaunchEffectTimes.clear();
|
||||
_hiddenCurrentRoomRocketLaunchKeys.clear();
|
||||
_roomRocketRoomReadyRewardRetryTimer?.cancel();
|
||||
_roomRocketRoomReadyRewardRetryTimer = null;
|
||||
_clearRoomRocketLaunchCountdownState();
|
||||
}
|
||||
|
||||
void _rememberRoomRocketLaunchCountdown(
|
||||
RoomRocketLaunchBroadcastMessage launch,
|
||||
) {
|
||||
if (!launch.isValid) {
|
||||
RoomRocketLaunchBroadcastMessage launch, {
|
||||
bool suppressReplayAfterDue = false,
|
||||
}) {
|
||||
if (!launch.isValid || _hasConsumedRoomRocketLaunchEffect(launch)) {
|
||||
return;
|
||||
}
|
||||
final now = DateTime.now().millisecondsSinceEpoch;
|
||||
@ -2245,12 +2262,15 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
_roomRocketLaunchCountdownDueTimes[key] = dueAt;
|
||||
_roomRocketLaunchCountdownKeysByRoom[launch.roomId] = key;
|
||||
_pendingRoomRocketCountdownLaunches[launch.roomId] = launch;
|
||||
if (suppressReplayAfterDue) {
|
||||
_hiddenCurrentRoomRocketLaunchKeys.add(key);
|
||||
}
|
||||
}
|
||||
|
||||
void _scheduleRoomRocketLaunchEffectsAfterCountdown(
|
||||
RoomRocketLaunchBroadcastMessage launch,
|
||||
) {
|
||||
if (!launch.isValid) {
|
||||
if (!launch.isValid || _hasConsumedRoomRocketLaunchEffect(launch)) {
|
||||
return;
|
||||
}
|
||||
_rememberRoomRocketLaunchCountdown(launch);
|
||||
@ -2278,14 +2298,18 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
void _playRoomRocketLaunchEffectsAndReward(
|
||||
RoomRocketLaunchBroadcastMessage launch,
|
||||
) {
|
||||
if (_hasConsumedRoomRocketLaunchEffect(launch)) {
|
||||
_clearRoomRocketLaunchCountdownForRoom(launch.roomId);
|
||||
return;
|
||||
}
|
||||
_clearRoomRocketLaunchCountdownForRoom(launch.roomId);
|
||||
if (!_isCurrentVisibleVoiceRoom(launch.roomId)) {
|
||||
_markRoomRocketRewardProbe(launch.roomId);
|
||||
_consumeRoomRocketLaunchWithoutEffects(launch);
|
||||
return;
|
||||
}
|
||||
final currentContext = context;
|
||||
if (currentContext == null || !currentContext.mounted) {
|
||||
_markRoomRocketRewardProbe(launch.roomId);
|
||||
_consumeRoomRocketLaunchWithoutEffects(launch);
|
||||
return;
|
||||
}
|
||||
final rtcProvider = Provider.of<RealTimeCommunicationManager>(
|
||||
@ -2297,6 +2321,7 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
_recentRoomRocketRewardProbeTimes.containsKey(launch.roomId);
|
||||
final pending = _pendingRoomRocketRewardPopups.remove(launch.roomId);
|
||||
_recentRoomRocketRewardProbeTimes.remove(launch.roomId);
|
||||
_markRoomRocketLaunchEffectConsumed(launch);
|
||||
rtcProvider.handleRoomRocketLaunchBroadcast(launch);
|
||||
if (shouldFetchReward) {
|
||||
unawaited(
|
||||
@ -2316,6 +2341,10 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
if (launch == null || !_isCurrentVisibleVoiceRoom(normalizedRoomId)) {
|
||||
return false;
|
||||
}
|
||||
if (_hasConsumedRoomRocketLaunchEffect(launch)) {
|
||||
_clearRoomRocketLaunchCountdownForRoom(normalizedRoomId);
|
||||
return false;
|
||||
}
|
||||
final currentContext = context;
|
||||
if (currentContext == null || !currentContext.mounted) {
|
||||
return false;
|
||||
@ -2325,7 +2354,9 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
listen: false,
|
||||
);
|
||||
final remaining = _roomRocketLaunchCountdownRemaining(normalizedRoomId);
|
||||
final launchKey = _roomRocketLaunchCountdownKey(launch);
|
||||
if (remaining > Duration.zero) {
|
||||
_hiddenCurrentRoomRocketLaunchKeys.remove(launchKey);
|
||||
_addRoomRocketLaunchNoticeIfNeeded(
|
||||
rtcProvider: rtcProvider,
|
||||
launch: launch,
|
||||
@ -2333,6 +2364,10 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
);
|
||||
_scheduleRoomRocketLaunchEffectsAfterCountdown(launch);
|
||||
} else {
|
||||
if (_hiddenCurrentRoomRocketLaunchKeys.remove(launchKey)) {
|
||||
_consumeRoomRocketLaunchWithoutEffects(launch);
|
||||
return false;
|
||||
}
|
||||
_playRoomRocketLaunchEffectsAndReward(launch);
|
||||
}
|
||||
return true;
|
||||
@ -2399,6 +2434,7 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
_roomRocketLaunchCountdownDueTimes.clear();
|
||||
_roomRocketLaunchCountdownKeysByRoom.clear();
|
||||
_pendingRoomRocketCountdownLaunches.clear();
|
||||
_hiddenCurrentRoomRocketLaunchKeys.clear();
|
||||
for (final timer in _roomRocketLaunchEffectTimers.values) {
|
||||
timer.cancel();
|
||||
}
|
||||
@ -2411,10 +2447,51 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
if (key != null) {
|
||||
_roomRocketLaunchCountdownDueTimes.remove(key);
|
||||
_roomRocketLaunchEffectTimers.remove(key)?.cancel();
|
||||
_hiddenCurrentRoomRocketLaunchKeys.remove(key);
|
||||
}
|
||||
_pendingRoomRocketCountdownLaunches.remove(normalizedRoomId);
|
||||
}
|
||||
|
||||
bool _hasConsumedRoomRocketLaunchEffect(
|
||||
RoomRocketLaunchBroadcastMessage launch,
|
||||
) {
|
||||
final key = _roomRocketLaunchCountdownKey(launch);
|
||||
if (key.isEmpty) {
|
||||
return false;
|
||||
}
|
||||
_pruneConsumedRoomRocketLaunchEffects(
|
||||
DateTime.now().millisecondsSinceEpoch,
|
||||
);
|
||||
return _consumedRoomRocketLaunchEffectTimes.containsKey(key);
|
||||
}
|
||||
|
||||
void _markRoomRocketLaunchEffectConsumed(
|
||||
RoomRocketLaunchBroadcastMessage launch,
|
||||
) {
|
||||
final key = _roomRocketLaunchCountdownKey(launch);
|
||||
if (key.isEmpty) {
|
||||
return;
|
||||
}
|
||||
_consumedRoomRocketLaunchEffectTimes[key] =
|
||||
DateTime.now().millisecondsSinceEpoch;
|
||||
_hiddenCurrentRoomRocketLaunchKeys.remove(key);
|
||||
}
|
||||
|
||||
void _consumeRoomRocketLaunchWithoutEffects(
|
||||
RoomRocketLaunchBroadcastMessage launch,
|
||||
) {
|
||||
_clearRoomRocketLaunchCountdownForRoom(launch.roomId);
|
||||
_pendingRoomRocketRewardPopups.remove(launch.roomId);
|
||||
_recentRoomRocketRewardProbeTimes.remove(launch.roomId);
|
||||
_markRoomRocketLaunchEffectConsumed(launch);
|
||||
}
|
||||
|
||||
void _pruneConsumedRoomRocketLaunchEffects(int now) {
|
||||
_consumedRoomRocketLaunchEffectTimes.removeWhere(
|
||||
(_, timestamp) => now - timestamp > _roomRocketLaunchEffectConsumedTtlMs,
|
||||
);
|
||||
}
|
||||
|
||||
void _handleCurrentVisibleRoomRocketLaunch({
|
||||
required RealTimeCommunicationManager rtcProvider,
|
||||
required RoomRocketLaunchBroadcastMessage launch,
|
||||
@ -2965,6 +3042,7 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
_recentRoomRocketLaunchLooseTimes.removeWhere(
|
||||
(_, timestamp) => now - timestamp > _roomRocketLaunchLooseRecentTtlMs,
|
||||
);
|
||||
_pruneConsumedRoomRocketLaunchEffects(now);
|
||||
}
|
||||
|
||||
String _roomRocketLaunchNoticeKeyForValues({
|
||||
@ -4006,6 +4084,8 @@ class RealTimeMessagingManager extends ChangeNotifier {
|
||||
_recentRoomRocketLaunchTimes.clear();
|
||||
_recentRoomRocketLaunchLooseTimes.clear();
|
||||
_recentRoomRocketRegionBroadcastTimes.clear();
|
||||
_consumedRoomRocketLaunchEffectTimes.clear();
|
||||
_hiddenCurrentRoomRocketLaunchKeys.clear();
|
||||
_roomRocketRewardPopupRetryTimer?.cancel();
|
||||
_roomRocketRewardPopupRetryTimer = null;
|
||||
onNewMessageListenerGroupMap.forEach((k, v) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user