import 'package:em2rp/providers/users_provider.dart'; import 'package:em2rp/providers/event_provider.dart'; import 'package:em2rp/utils/auth_guard_widget.dart'; import 'package:em2rp/views/calendar_page.dart'; import 'package:em2rp/views/login_page.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:firebase_core/firebase_core.dart'; import 'firebase_options.dart'; import 'utils/colors.dart'; import 'views/my_account_page.dart'; import 'views/user_management_page.dart'; import 'package:provider/provider.dart'; import 'providers/local_user_provider.dart'; import 'services/user_service.dart'; import 'views/reset_password_page.dart'; import 'config/env.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); await FirebaseAuth.instance.setPersistence(Persistence.LOCAL); runApp( MultiProvider( providers: [ // Injection du service UserService Provider(create: (_) => UserService()), // LocalUserProvider pour la gestion de l'authentification ChangeNotifierProvider( create: (context) => LocalUserProvider()), // Injection des Providers en utilisant UserService ChangeNotifierProvider( create: (context) => UsersProvider(context.read()), ), // EventProvider pour la gestion des événements ChangeNotifierProvider( create: (context) => EventProvider(), ), ], child: const MyApp(), ), ); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { print("test"); return MaterialApp( title: 'EM2 ERP', theme: ThemeData( primarySwatch: Colors.red, primaryColor: AppColors.noir, colorScheme: ColorScheme.fromSwatch().copyWith(secondary: AppColors.rouge), textTheme: const TextTheme( bodyMedium: TextStyle(color: AppColors.noir), ), inputDecorationTheme: const InputDecorationTheme( focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: AppColors.noir), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: AppColors.gris), ), labelStyle: TextStyle(color: AppColors.noir), hintStyle: TextStyle(color: AppColors.gris), ), elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( foregroundColor: AppColors.blanc, backgroundColor: AppColors.noir, ), ), ), locale: const Locale('fr', 'FR'), supportedLocales: const [ Locale('fr', 'FR'), ], localizationsDelegates: const [ GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], home: const AutoLoginWrapper(), routes: { '/login': (context) => const LoginPage(), '/calendar': (context) => const AuthGuard(child: CalendarPage()), '/my_account': (context) => const AuthGuard(child: MyAccountPage()), '/user_management': (context) => const AuthGuard( requiredPermission: "view_all_users", child: UserManagementPage()), '/reset_password': (context) { final args = ModalRoute.of(context)!.settings.arguments as Map; return ResetPasswordPage( email: args['email'] as String, actionCode: args['actionCode'] as String, ); }, }, ); } } class AutoLoginWrapper extends StatefulWidget { const AutoLoginWrapper({super.key}); @override State createState() => _AutoLoginWrapperState(); } class _AutoLoginWrapperState extends State { @override void initState() { super.initState(); _autoLogin(); } Future _autoLogin() async { try { final localAuthProvider = Provider.of(context, listen: false); // Vérifier si l'utilisateur est déjà connecté if (FirebaseAuth.instance.currentUser == null && Env.isDevelopment) { // Connexion automatique en mode développement await localAuthProvider.signInWithEmailAndPassword( Env.devAdminEmail, Env.devAdminPassword, ); } // Charger les données utilisateur await localAuthProvider.loadUserData(); if (mounted) { Navigator.of(context).pushReplacementNamed('/calendar'); } } catch (e) { print('Auto login failed: $e'); if (mounted) { Navigator.of(context).pushReplacementNamed('/login'); } } } @override Widget build(BuildContext context) { return const Scaffold( body: Center( child: CircularProgressIndicator(), ), ); } }