Files
BlockSeasons/lib/state/providers.dart
T
airkjw 8739fc0e26 feat: glossy tile rendering and per-season theme colors
Introduces candy-gloss tile rendering (diagonal gradient + glass highlight
+ optional glow) via a shared paintGlossyTile() in tile_painter.dart,
applied to board filled-cells and tray/drag-overlay pieces. Adds
ThemeColors to palette.dart for UI-layer season color resolution, and
activeThemeProvider for one-call access to the active season's theme.
Regenerates the game_screen golden to reflect the new look.
2026-06-11 21:06:26 +09:00

55 lines
1.7 KiB
Dart

import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../data/content_repository.dart';
import '../data/save_repository.dart';
import '../data/streak.dart';
import '../game/models/season.dart';
import '../services/audio_service.dart';
import 'game_session_notifier.dart';
import 'progress_notifier.dart';
import 'season_flow_notifier.dart';
import 'streak_notifier.dart';
final gameSessionProvider =
NotifierProvider<GameSessionNotifier, GameViewState?>(
GameSessionNotifier.new,
);
final audioServiceProvider = Provider<AudioService>((ref) {
final service = AudioService();
ref.onDispose(service.dispose);
return service;
});
/// Overridden with the opened repository in main() (and in tests).
final saveRepositoryProvider = Provider<SaveRepository>(
(ref) => throw UnimplementedError('override with an opened SaveRepository'),
);
final progressProvider =
NotifierProvider<ProgressNotifier, Map<String, StageProgress>>(
ProgressNotifier.new,
);
final seasonFlowProvider = NotifierProvider<SeasonFlowNotifier, SeasonFlow?>(
SeasonFlowNotifier.new,
);
final contentRepositoryProvider =
Provider<ContentRepository>((ref) => ContentRepository());
final seasonsProvider = FutureProvider<List<SeasonPack>>(
(ref) => ref.read(contentRepositoryProvider).availableSeasons(),
);
final streakProvider = NotifierProvider<StreakNotifier, StreakState>(
StreakNotifier.new,
);
/// The visual theme of whatever season is in play; fallback outside seasons
/// (home, endless). Pure model — UI converts via ThemeColors.
final activeThemeProvider = Provider<SeasonTheme>((ref) {
final flow = ref.watch(seasonFlowProvider);
return flow?.pack.theme ?? SeasonTheme.fallback;
});