Add daily streak system and normalize bundle id to com.airkjw.blockseasons

Pure advanceStreak (1-day grace none, milestone flags at 3/7/14/30),
persisted in the save blob; StreakNotifier advances on every finished
attempt; home screen flame chip and milestone snackbar. Fix flutter
create's camelCased iOS bundle id and underscored Android application
id to the agreed lowercase form before any store registration.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-11 17:25:39 +09:00
parent 7bc26447f7
commit 607278928b
14 changed files with 271 additions and 15 deletions
+12
View File
@@ -113,12 +113,24 @@ class _GameScreenState extends ConsumerState<GameScreen> {
.recordWin(stars: next.starsEarned, score: next.score);
}
if (next.phase == GamePhase.lost) audio.play(Sfx.lose);
if (next.phase == GamePhase.won || next.phase == GamePhase.lost) {
ref.read(streakProvider.notifier).onStagePlayed(DateTime.now());
}
}
}
@override
Widget build(BuildContext context) {
ref.listen<GameViewState?>(gameSessionProvider, _onSessionChange);
ref.listen(streakProvider, (prev, next) {
final milestone = next.hitMilestone;
if (milestone != null && prev?.hitMilestone != milestone) {
final l10n = AppLocalizations.of(context)!;
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(l10n.streakMilestone(milestone))),
);
}
});
final view = ref.watch(gameSessionProvider);
if (view == null) {
return const Scaffold(body: Center(child: CircularProgressIndicator()));