import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'l10n/app_localizations.dart'; import 'theme.dart'; import 'providers/providers.dart'; import 'pages/login_page.dart'; import 'pages/routes_page.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await SystemChrome.setPreferredOrientations([ DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight, ]); runApp( const ProviderScope( child: PlanBLogisticApp(), ), ); } class PlanBLogisticApp extends ConsumerWidget { const PlanBLogisticApp({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final languageAsync = ref.watch(languageProvider); final themeMode = ref.watch(themeModeProvider); return languageAsync.when( data: (language) { Locale? locale; if (language == 'en') { locale = const Locale('en'); } else if (language == 'fr') { locale = const Locale('fr'); } // If language is 'system', locale remains null and will use device locale return MaterialApp( title: 'Plan B Logistics', theme: MaterialTheme(const TextTheme()).light(), darkTheme: MaterialTheme(const TextTheme()).dark(), themeMode: themeMode, locale: locale, localizationsDelegates: const [ AppLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const [ Locale('en'), Locale('fr'), ], home: const AppHome(), ); }, loading: () => MaterialApp( title: 'Plan B Logistics', theme: MaterialTheme(const TextTheme()).light(), darkTheme: MaterialTheme(const TextTheme()).dark(), themeMode: themeMode, home: const Scaffold( body: Center( child: CircularProgressIndicator(), ), ), ), error: (_, __) => MaterialApp( title: 'Plan B Logistics', theme: MaterialTheme(const TextTheme()).light(), darkTheme: MaterialTheme(const TextTheme()).dark(), themeMode: themeMode, localizationsDelegates: const [ AppLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const [ Locale('en'), Locale('fr'), ], home: const AppHome(), ), ); } } class AppHome extends ConsumerWidget { const AppHome({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final isAuthenticatedAsync = ref.watch(isAuthenticatedProvider); // Update iOS system UI to match current theme final brightness = Theme.of(context).brightness; final isDark = brightness == Brightness.dark; SystemChrome.setSystemUIOverlayStyle( SystemUiOverlayStyle( statusBarBrightness: isDark ? Brightness.dark : Brightness.light, statusBarIconBrightness: isDark ? Brightness.light : Brightness.dark, systemNavigationBarColor: isDark ? Colors.black : Colors.white, systemNavigationBarIconBrightness: isDark ? Brightness.light : Brightness.dark, ), ); return isAuthenticatedAsync.when( data: (isAuthenticated) { if (isAuthenticated) { return const RoutesPage(); } else { return const LoginPage(); } }, loading: () => const Scaffold( body: Center( child: CircularProgressIndicator(), ), ), error: (error, stackTrace) => const LoginPage(), ); } }