bible-tracker/lib/main.dart

54 lines
1.6 KiB
Dart
Raw Normal View History

2026-04-20 18:39:49 +00:00
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'screens/home_screen.dart';
2026-04-20 19:13:58 +00:00
import 'services/last_location.dart';
2026-04-20 18:39:49 +00:00
import 'services/tracker_storage.dart';
import 'widgets/theme.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
final SharedPreferences prefs = await SharedPreferences.getInstance();
2026-04-20 19:13:58 +00:00
// Load the last location synchronously before the root navigator can fire
// its initial didPush and clear the saved value.
final LastLocation? pending = LastLocationService(prefs).load();
2026-04-20 18:39:49 +00:00
runApp(
ProviderScope(
2026-04-20 19:13:58 +00:00
overrides: <Override>[
sharedPreferencesProvider.overrideWithValue(prefs),
pendingRestoreProvider.overrideWithValue(pending),
],
2026-04-20 18:39:49 +00:00
child: const BibleTrackerApp(),
),
);
}
2026-04-20 19:13:58 +00:00
class BibleTrackerApp extends ConsumerStatefulWidget {
2026-04-20 18:39:49 +00:00
const BibleTrackerApp({super.key});
2026-04-20 19:13:58 +00:00
@override
ConsumerState<BibleTrackerApp> createState() => _BibleTrackerAppState();
}
class _BibleTrackerAppState extends ConsumerState<BibleTrackerApp> {
late final LastLocationObserver _observer = LastLocationObserver((
LastLocation? location,
) async {
await ref.read(lastLocationServiceProvider).save(location);
});
2026-04-20 18:39:49 +00:00
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'My Bible Tracker',
debugShowCheckedModeBanner: false,
theme: AppTheme.light(),
darkTheme: AppTheme.dark(),
themeMode: ThemeMode.system,
home: const HomeScreen(),
2026-04-20 19:13:58 +00:00
navigatorObservers: <NavigatorObserver>[_observer],
2026-04-20 18:39:49 +00:00
);
}
}