feat(ads): stage-end interstitial gated by policy; restart resets round

This commit is contained in:
2026-06-13 14:03:52 +09:00
parent 3943653a23
commit 297449ccce
2 changed files with 11 additions and 3 deletions
+1
View File
@@ -75,6 +75,7 @@ class GameSessionNotifier extends Notifier<GameViewState?> {
final stage = _stage; final stage = _stage;
if (stage == null) throw StateError('no stage to restart'); if (stage == null) throw StateError('no stage to restart');
startStage(stage, attempt: _attempt + 1, generator: _generatorOverride); startStage(stage, attempt: _attempt + 1, generator: _generatorOverride);
ref.read(adServiceProvider).onRoundStart();
if (stage.endless) { if (stage.endless) {
ref.read(analyticsProvider).endlessStart(); ref.read(analyticsProvider).endlessStart();
} else { } else {
+10 -3
View File
@@ -382,8 +382,12 @@ class _GameScreenState extends ConsumerState<GameScreen>
[ [
if (flow != null && flow.hasNext) if (flow != null && flow.hasNext)
FilledButton( FilledButton(
onPressed: onPressed: () {
ref.read(seasonFlowProvider.notifier).nextStage, ref.read(seasonFlowProvider.notifier).nextStage();
if (!view.endless) {
ref.read(adServiceProvider).maybeShowInterstitial();
}
},
child: Text(l10n.nextStage), child: Text(l10n.nextStage),
), ),
TextButton( TextButton(
@@ -460,7 +464,10 @@ class _GameScreenState extends ConsumerState<GameScreen>
l10n.stageFailed, l10n.stageFailed,
[ [
FilledButton( FilledButton(
onPressed: notifier.restart, onPressed: () {
ref.read(adServiceProvider).maybeShowInterstitial();
notifier.restart();
},
child: Text(l10n.playAgain), child: Text(l10n.playAgain),
), ),
], ],