import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:marco/helpers/services/app_initializer.dart'; import 'package:marco/view/my_app.dart'; import 'package:marco/helpers/theme/app_notifier.dart'; import 'package:marco/helpers/services/app_logger.dart'; import 'package:marco/view/layouts/offline_screen.dart'; import 'package:marco/helpers/services/storage/local_storage.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); // Initialize logging system await initLogging(); logSafe("App starting..."); // ✅ Ensure local storage is ready before enabling remote logging await LocalStorage.init(); logSafe("💡 Local storage initialized (early init for logging)."); // Now safe to enable remote logging enableRemoteLogging(); try { await initializeApp(); logSafe("App initialized successfully."); runApp( ChangeNotifierProvider( create: (_) => AppNotifier(), child: const MainWrapper(), ), ); } catch (e, stacktrace) { logSafe( 'App failed to initialize.', level: LogLevel.error, error: e, stackTrace: stacktrace, ); runApp(_buildErrorApp()); } } Widget _buildErrorApp() => const MaterialApp( home: Scaffold( body: Center( child: Text( "Failed to initialize the app.", style: TextStyle(color: Colors.red), ), ), ), ); class MainWrapper extends StatefulWidget { const MainWrapper({super.key}); @override State createState() => _MainWrapperState(); } class _MainWrapperState extends State { List _connectivityStatus = [ConnectivityResult.none]; final Connectivity _connectivity = Connectivity(); @override void initState() { super.initState(); _initializeConnectivity(); _connectivity.onConnectivityChanged.listen((results) { setState(() => _connectivityStatus = results); }); } Future _initializeConnectivity() async { final result = await _connectivity.checkConnectivity(); setState(() => _connectivityStatus = result); } @override Widget build(BuildContext context) { final bool isOffline = _connectivityStatus.contains(ConnectivityResult.none); return isOffline ? const MaterialApp( debugShowCheckedModeBanner: false, home: OfflineScreen()) : const MyApp(); } }