/// Application entry point: wires Provider and the Values Sort practice. library; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'providers/theme_provider.dart'; import 'providers/values_sort_provider.dart'; import 'screens/splash_screen.dart'; import 'services/storage_service.dart'; import 'utils/app_theme.dart'; import 'utils/constants.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); final storage = StorageService(); await storage.init(); runApp(MyApp(storage: storage)); } /// Root widget. Theme and sort session live here so every route can watch them. class MyApp extends StatelessWidget { const MyApp({super.key, required this.storage}); final StorageService storage; @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => ThemeController(storage)), ChangeNotifierProvider( create: (_) => ValuesSortController(storage: storage)..load(), ), ], child: const _MaterialRoot(), ); } } class _MaterialRoot extends StatelessWidget { const _MaterialRoot(); @override Widget build(BuildContext context) { final themeMode = context.watch().themeMode; return MaterialApp( title: kAppName, debugShowCheckedModeBanner: false, theme: AppTheme.light(), darkTheme: AppTheme.dark(), themeMode: themeMode, home: const SplashScreen(), ); } }