import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'core/feature_flags.dart'; import 'l10n/gen/app_localizations.dart'; import 'state/providers.dart'; import 'ui/screens/splash_screen.dart'; class BlockSeasonsApp extends ConsumerStatefulWidget { const BlockSeasonsApp({super.key}); @override ConsumerState createState() => _BlockSeasonsAppState(); } class _BlockSeasonsAppState extends ConsumerState with WidgetsBindingObserver { @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); WidgetsBinding.instance.addPostFrameCallback((_) { ref.read(consentServiceProvider).ensureConsentAndInitialize(); // Eagerly start the IAP service so its purchase stream is live for the // whole session — restores and interrupted/deferred transactions are // delivered (and completed) even if the player never opens Settings. if (kIapEnabled) ref.read(iapServiceProvider); // Start background music for the current context (menu by default). ref.read(musicServiceProvider).playKey(ref.read(activeThemeProvider).bgm); }); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); } @override void didChangeAppLifecycleState(AppLifecycleState state) { // Pause music while the app is not in the foreground. ref .read(musicServiceProvider) .setBackgrounded(state != AppLifecycleState.resumed); } @override Widget build(BuildContext context) { // Switch the looping track whenever the active season theme changes // (home/menu -> a season -> back). playKey is a no-op if unchanged. ref.listen(activeThemeProvider, (_, next) { ref.read(musicServiceProvider).playKey(next.bgm); }); return MaterialApp( onGenerateTitle: (context) => AppLocalizations.of(context)!.appTitle, debugShowCheckedModeBanner: false, localizationsDelegates: const [ AppLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const [Locale('en'), Locale('ko')], theme: ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: const Color(0xFF5B7FFF), brightness: Brightness.dark, ), useMaterial3: true, ), home: const SplashScreen(), ); } }