import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:travel_mate/services/error_service.dart'; import 'blocs/auth/auth_bloc.dart'; import 'blocs/auth/auth_event.dart'; import 'blocs/auth/auth_state.dart'; import 'blocs/theme/theme_bloc.dart'; import 'blocs/theme/theme_event.dart'; import 'blocs/theme/theme_state.dart'; import 'blocs/group/group_bloc.dart'; import 'blocs/user/user_bloc.dart'; import 'blocs/trip/trip_bloc.dart'; import 'repositories/auth_repository.dart'; import 'repositories/trip_repository.dart'; import 'repositories/user_repository.dart'; import 'repositories/group_repository.dart'; import 'pages/login.dart'; import 'pages/home.dart'; import 'pages/signup.dart'; import 'pages/resetpswd.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MultiRepositoryProvider( providers: [ RepositoryProvider( create: (context) => AuthRepository(), ), RepositoryProvider( create: (context) => UserRepository(), ), RepositoryProvider( create: (context) => TripRepository(), ), RepositoryProvider( create: (context) => GroupRepository(), ), ], child: MultiBlocProvider( providers: [ BlocProvider( create: (context) => ThemeBloc()..add(ThemeLoadRequested()), ), BlocProvider( create: (context) => AuthBloc( authRepository: context.read(), )..add(AuthCheckRequested()), ), BlocProvider(create: (context) => GroupBloc( context.read(), )), BlocProvider(create: (context) => TripBloc( tripRepository: context.read(), ), ), BlocProvider(create: (context) => UserBloc()), ], child: BlocBuilder( builder: (context, themeState) { return MaterialApp( title: 'Travel Mate', navigatorKey: ErrorService.navigatorKey, themeMode: themeState.themeMode, theme: ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: const Color.fromARGB(255, 180, 180, 180), brightness: Brightness.light, ), useMaterial3: true, ), darkTheme: ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: const Color.fromARGB(255, 43, 43, 43), brightness: Brightness.dark, ), useMaterial3: true, ), home: BlocBuilder( builder: (context, authState) { if (authState is AuthAuthenticated) { return const HomePage(); } return const LoginPage(); }, ), routes: { '/login': (context) => const LoginPage(), '/signup': (context) => const SignUpPage(), '/home': (context) => const HomePage(), '/forgot': (context) => const ForgotPasswordPage(), }, debugShowCheckedModeBanner: false, ); }, ), ), ); } }