// main.dart import 'dart:ui'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:logger/logger.dart'; import 'package:provider/provider.dart'; import 'package:provider/single_child_widget.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:tm_app/core/config/dependencies.dart'; import 'package:tm_app/core/config/web_url_strategy.dart'; import 'package:tm_app/core/services/cache_init.dart'; import 'package:tm_app/core/services/messaging_service.dart'; import 'package:tm_app/core/theme/theme_provider.dart'; import 'core/routes/app_routes.dart'; import 'core/theme/colors.dart'; import 'core/utils/logger.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // Initialize SVG cache await CacheInit.init(); await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); // Initialize the logger appLogger.init(); // Log app start appLogger.info('🚀 Starting TM App...'); // appLogger.logNavigation('Home', 'Login'); final prefs = await SharedPreferences.getInstance(); List providers = [ Provider(create: (context) => prefs), ...providersRemote, ]; // Configure web URL strategy if running on web configureWebUrlStrategy(); if (kIsWeb) { await Firebase.initializeApp( options: const FirebaseOptions( apiKey: 'AIzaSyCTjdsk2jE34IfnvSKP1JMTIf_Abd7tbt0', authDomain: 'opplens-270d1.firebaseapp.com', projectId: 'opplens-270d1', storageBucket: 'opplens-270d1.firebasestorage.app', messagingSenderId: '6923326255', appId: '1:6923326255:web:c71763ece06aaaf3ed87da', measurementId: 'G-M5HQR4YZVS', ), ); final _firebaseMessaging = FirebaseMessaging.instance; await _firebaseMessaging.requestPermission(); final fcmToken = await _firebaseMessaging.getToken(); Logger().i('FCMToken: $fcmToken'); } else { await Firebase.initializeApp(); await MessagingService().initNotifications(); } runApp(MultiProvider(providers: providers, child: const MyApp())); } class MyApp extends StatefulWidget { const MyApp({super.key}); @override State createState() => _MyAppState(); } class _MyAppState extends State { @override void didChangeDependencies() { super.didChangeDependencies(); // Set the context for ThemeProvider to enable forced rebuilds ThemeProvider.setContext(context); } @override Widget build(BuildContext context) { // Listen to theme changes final themeProvider = context.watch(); return MaterialApp.router( title: 'OppLens', debugShowCheckedModeBanner: false, scrollBehavior: const MaterialScrollBehavior().copyWith( dragDevices: { PointerDeviceKind.mouse, PointerDeviceKind.touch, PointerDeviceKind.stylus, PointerDeviceKind.unknown, }, ), theme: ThemeData( pageTransitionsTheme: PageTransitionsTheme( builders: { for (final platform in TargetPlatform.values) platform: kIsWeb ? const FadeUpwardsPageTransitionsBuilder() : const CupertinoPageTransitionsBuilder(), }, ), brightness: themeProvider.isDarkMode ? Brightness.dark : Brightness.light, primaryColor: AppColors.primaryColor, scaffoldBackgroundColor: AppColors.backgroundColor, colorScheme: ColorScheme.fromSeed( seedColor: AppColors.primaryColor, brightness: themeProvider.isDarkMode ? Brightness.dark : Brightness.light, ), ), routerConfig: appRouter, ); } }