import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:get/get.dart'; import 'package:marco/helpers/extensions/app_localization_delegate.dart'; import 'package:marco/helpers/services/localizations/language.dart'; import 'package:marco/helpers/services/navigation_services.dart'; import 'package:marco/helpers/services/storage/local_storage.dart'; import 'package:marco/helpers/theme/app_notifier.dart'; import 'package:marco/helpers/theme/app_theme.dart'; import 'package:marco/helpers/theme/theme_customizer.dart'; import 'package:marco/routes.dart'; import 'package:provider/provider.dart'; import 'package:url_strategy/url_strategy.dart'; import 'package:marco/helpers/services/auth_service.dart'; import 'package:flutter/services.dart'; import 'package:logger/logger.dart'; final Logger logger = Logger(); Future main() async { WidgetsFlutterBinding.ensureInitialized(); setPathUrlStrategy(); SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( statusBarColor: const Color.fromARGB(255, 255, 0, 0), statusBarIconBrightness: Brightness.light, )); try { await LocalStorage.init(); await ThemeCustomizer.init(); AppStyle.init(); logger.i("App initialization completed successfully."); } catch (e, stacktrace) { logger.e('Error during app initialization:', error: e, stackTrace: stacktrace); return; } runApp(ChangeNotifierProvider( create: (context) => AppNotifier(), child: const MyApp(), )); } class MyApp extends StatelessWidget { const MyApp({super.key}); Future _getInitialRoute() async { if (!AuthService.isLoggedIn) { logger.i("User not logged in. Routing to /auth/login-option"); return "/auth/login-option"; } logger.i("User is logged in."); final bool hasMpin = LocalStorage.getIsMpin(); logger.i("MPIN enabled: $hasMpin"); if (hasMpin) { await LocalStorage.setBool("mpin_verified", false); logger.i("Routing to /auth/mpin-auth and setting mpin_verified to false"); return "/auth/mpin-auth"; } else { logger.i("MPIN not enabled. Routing to /home"); return "/home"; } } @override Widget build(BuildContext context) { return Consumer( builder: (_, notifier, __) { return FutureBuilder( future: _getInitialRoute(), builder: (context, snapshot) { if (!snapshot.hasData) { return const MaterialApp( home: Center(child: CircularProgressIndicator()), ); } return GetMaterialApp( debugShowCheckedModeBanner: false, theme: AppTheme.lightTheme, darkTheme: AppTheme.darkTheme, themeMode: ThemeCustomizer.instance.theme, navigatorKey: NavigationService.navigatorKey, initialRoute: snapshot.data!, getPages: getPageRoute(), builder: (context, child) { NavigationService.registerContext(context); return Directionality( textDirection: AppTheme.textDirection, child: child ?? Container(), ); }, localizationsDelegates: [ AppLocalizationsDelegate(context), GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: Language.getLocales(), ); }, ); }, ); } }