import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:intl/date_symbol_data_local.dart'; import 'package:intl/intl.dart'; import 'package:kooltab2/services/pin_lock_service.dart'; import 'package:kooltab2/services/settings_service.dart'; import 'package:kooltab2/viewmodels/dev_menu_view_model.dart'; import 'package:kooltab2/viewmodels/history_view_model.dart'; import 'package:kooltab2/viewmodels/inventory_view_model.dart'; import 'package:kooltab2/viewmodels/pin_lock_view_model.dart'; import 'package:kooltab2/viewmodels/settings_view_model.dart'; import 'package:provider/provider.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; import 'app/app.dart'; import 'app/app_bootstrap.dart'; import 'app/router.dart'; import 'database/app_database.dart'; import 'services/bar_tab_service.dart'; import 'services/product_service.dart'; import 'viewmodels/bar_screen_view_model.dart'; import 'viewmodels/product_list_view_model.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); await initializeDateFormatting('nl_BE', null); Intl.defaultLocale = 'nl_BE'; await SystemChrome.setPreferredOrientations([ DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight, ]); final database = AppDatabase(); final pinLockViewModel = PinLockViewModel( pinLockService: PinLockService(), settingsService: DriftSettingsService(database: database), ); await pinLockViewModel.ensureLoaded(); final appRouter = createAppRouter(pinLockViewModel); await SentryFlutter.init( (options) { options.dsn = 'https://2c31c1baf3ee495288ad08a56d7baf0e@glitchtip.brammie15.dev/1'; options.tracesSampleRate = kReleaseMode ? 0.1 : 1.0; options.enableAutoSessionTracking = false; options.attachScreenshot = true; options.attachViewHierarchy = true; options.enableLogs = true; options.attachThreads = true; options.replay.onErrorSampleRate = 1.0; options.replay.sessionSampleRate = 0.05; }, appRunner: () => runApp( MultiProvider( providers: [ Provider.value(value: database), Provider( create: (context) => DriftProductService(database: context.read()), ), Provider( create: (context) => DriftBarTabService(database: context.read()), ), Provider( create: (context) => DriftSettingsService(database: context.read()), ), ChangeNotifierProvider( create: (context) => InventoryViewModel( productService: context.read(), )..load(), ), ChangeNotifierProvider( create: (context) => ProductListViewModel( productService: context.read(), inventory: context.read(), ), ), ChangeNotifierProvider( create: (context) => BarScreenViewModel( barTabService: context.read(), inventory: context.read(), ), ), ChangeNotifierProvider( create: (context) => HistoryViewModel(barTabService: context.read()), ), ChangeNotifierProvider.value( value: pinLockViewModel, ), ChangeNotifierProvider( create: (context) => SettingsViewModel( settingsService: context.read(), ), ), ChangeNotifierProvider( create: (context) => DevMenuViewModel( database: context.read(), productService: context.read(), barTabService: context.read(), settingsService: context.read(), pinLockService: PinLockService(), ), ), ], child: AppBootstrap(child: KoolTabApp(router: appRouter)), ), ), ); }