import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; // Models import '../models/user_registration_data.dart'; import '../models/am_registration_data.dart'; // Screens import '../screens/auth/login_screen.dart'; import '../screens/auth/register_choice_screen.dart'; import '../screens/auth/parent_register_step1_screen.dart'; import '../screens/auth/parent_register_step2_screen.dart'; import '../screens/auth/parent_register_step3_screen.dart'; import '../screens/auth/parent_register_step4_screen.dart'; import '../screens/auth/parent_register_step5_screen.dart'; import '../screens/auth/am_register_step1_screen.dart'; import '../screens/auth/am_register_step2_screen.dart'; import '../screens/auth/am_register_step3_screen.dart'; import '../screens/auth/am_register_step4_screen.dart'; import '../screens/home/home_screen.dart'; import '../screens/administrateurs/admin_dashboardScreen.dart'; import '../screens/gestionnaire/gestionnaire_dashboard_screen.dart'; import '../screens/home/parent_screen/ParentDashboardScreen.dart'; import '../screens/am/am_dashboard_screen.dart'; import '../screens/legal/privacy_page.dart'; import '../screens/legal/legal_page.dart'; import '../screens/unknown_screen.dart'; // --- Provider Instances --- // It's generally better to provide these higher up the widget tree if possible, // or ensure they are created only once. // For ShellRoute, creating them here and passing via .value is common. final userRegistrationDataNotifier = UserRegistrationData(); final amRegistrationDataNotifier = AmRegistrationData(); class AppRouter { static final GoRouter router = GoRouter( initialLocation: '/login', errorBuilder: (context, state) => const UnknownScreen(), debugLogDiagnostics: true, routes: [ GoRoute( path: '/login', builder: (BuildContext context, GoRouterState state) => const LoginScreen(), ), GoRoute( path: '/register-choice', builder: (BuildContext context, GoRouterState state) => const RegisterChoiceScreen(), ), GoRoute( path: '/home', builder: (BuildContext context, GoRouterState state) => const HomeScreen(), ), GoRoute( path: '/admin-dashboard', builder: (BuildContext context, GoRouterState state) => const AdminDashboardScreen(), ), GoRoute( path: '/gestionnaire-dashboard', builder: (BuildContext context, GoRouterState state) => const GestionnaireDashboardScreen(), ), GoRoute( path: '/parent-dashboard', builder: (BuildContext context, GoRouterState state) => const ParentDashboardScreen(), ), GoRoute( path: '/am-dashboard', builder: (BuildContext context, GoRouterState state) => const AmDashboardScreen(), ), GoRoute( path: '/privacy', builder: (BuildContext context, GoRouterState state) => const PrivacyPage(), ), GoRoute( path: '/legal', builder: (BuildContext context, GoRouterState state) => const LegalPage(), ), // --- Parent Registration Flow --- ShellRoute( builder: (context, state, child) { return ChangeNotifierProvider.value( value: userRegistrationDataNotifier, child: child, ); }, routes: [ GoRoute( path: '/parent-register-step1', builder: (BuildContext context, GoRouterState state) => const ParentRegisterStep1Screen(), ), GoRoute( path: '/parent-register-step2', builder: (BuildContext context, GoRouterState state) => const ParentRegisterStep2Screen(), ), GoRoute( path: '/parent-register-step3', builder: (BuildContext context, GoRouterState state) => const ParentRegisterStep3Screen(), ), GoRoute( path: '/parent-register-step4', builder: (BuildContext context, GoRouterState state) => const ParentRegisterStep4Screen(), ), GoRoute( path: '/parent-register-step5', builder: (BuildContext context, GoRouterState state) => const ParentRegisterStep5Screen(), ), ], ), // --- AM (Assistante Maternelle) Registration Flow --- ShellRoute( builder: (context, state, child) { return ChangeNotifierProvider.value( value: amRegistrationDataNotifier, child: child, ); }, routes: [ GoRoute( path: '/am-register-step1', builder: (BuildContext context, GoRouterState state) => const AmRegisterStep1Screen(), ), GoRoute( path: '/am-register-step2', builder: (BuildContext context, GoRouterState state) => const AmRegisterStep2Screen(), ), GoRoute( path: '/am-register-step3', builder: (BuildContext context, GoRouterState state) => const AmRegisterStep3Screen(), ), GoRoute( path: '/am-register-step4', builder: (BuildContext context, GoRouterState state) => const AmRegisterStep4Screen(), ), ], ), ], ); }