Matthias Nott
2026-04-01 98e5695f9c77c594a103e9e81128798d41bae46a
lib/main.dart
....@@ -7,6 +7,7 @@
77 import 'theme/app_theme.dart';
88 import 'providers/providers.dart';
99 import 'services/audio_service.dart';
10
+import 'services/purchase_service.dart';
1011
1112 void main() async {
1213 WidgetsFlutterBinding.ensureInitialized();
....@@ -23,10 +24,15 @@
2324 // Initialize audio service
2425 AudioService.init();
2526
27
+ // Initialize purchase service (loads cached status + starts StoreKit listener)
28
+ await PurchaseService.instance.initialize();
29
+
2630 runApp(
2731 ProviderScope(
2832 overrides: [
2933 themeModeProvider.overrideWith((ref) => themeMode),
34
+ // Seed isProProvider from StoreKit cache so first frame is correct.
35
+ isProProvider.overrideWith((ref) => PurchaseService.instance.isPro),
3036 ],
3137 child: const PAILotApp(),
3238 ),
....@@ -47,6 +53,18 @@
4753 void initState() {
4854 super.initState();
4955 _router = createRouter();
56
+ // Keep isProProvider in sync whenever PurchaseService notifies a change.
57
+ PurchaseService.instance.addListener(_onPurchaseChanged);
58
+ }
59
+
60
+ @override
61
+ void dispose() {
62
+ PurchaseService.instance.removeListener(_onPurchaseChanged);
63
+ super.dispose();
64
+ }
65
+
66
+ void _onPurchaseChanged() {
67
+ ref.read(isProProvider.notifier).state = PurchaseService.instance.isPro;
5068 }
5169
5270 @override