607278928b
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>
17 lines
497 B
Dart
17 lines
497 B
Dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
import '../data/streak.dart';
|
|
import 'providers.dart';
|
|
|
|
/// Daily streak state; advanced once per stage attempt (win or lose).
|
|
class StreakNotifier extends Notifier<StreakState> {
|
|
@override
|
|
StreakState build() => ref.read(saveRepositoryProvider).streak;
|
|
|
|
Future<void> onStagePlayed(DateTime now) async {
|
|
final next = advanceStreak(state, now);
|
|
await ref.read(saveRepositoryProvider).saveStreak(next);
|
|
state = next;
|
|
}
|
|
}
|