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 'package:flutter_dotenv/flutter_dotenv.dart'; import 'blocs/auth/auth_bloc.dart'; import 'blocs/auth/auth_event.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 dotenv.load(fileName: ".env"); 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(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: const LoginPage(), routes: { '/login': (context) => const LoginPage(), '/signup': (context) => const SignUpPage(), '/home': (context) => const HomePage(), '/forgot': (context) => const ForgotPasswordPage(), }, debugShowCheckedModeBanner: false, ); }, ), ), ); } }