import 'package:drift_flutter/drift_flutter.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; import 'src/app.dart'; import 'src/database/database.dart'; import 'src/exercises/exercise_library.dart'; import 'src/history/session_repository.dart'; import 'src/plans/plan_repository.dart'; import 'src/player/player_effects.dart'; import 'src/settings/settings_controller.dart'; import 'src/streak/reminder_scheduler.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]); final db = AppDatabase(driftDatabase(name: 'zenxercise')); final library = await ExerciseLibrary.load(rootBundle); final settings = SettingsController(SettingsService()); await settings.loadSettings(); final sessions = SessionRepository(db); final notifier = LocalNotifier(); await notifier.init(); final reminders = ReminderScheduler(notifier, settings, sessions); // Today may have been finished, or a day may have passed, since the last run. reminders.sync(); runApp( MultiProvider( providers: [ ChangeNotifierProvider.value(value: settings), Provider.value(value: library), Provider.value(value: PlanRepository(db)), Provider.value(value: sessions), Provider.value(value: notifier), Provider.value(value: reminders), Provider(create: (_) => DevicePlayerEffects()), ], child: const ZenXerciseApp(), ), ); }