import 'package:go_router/go_router.dart'; import 'package:shuffle/core/routing/app_routes.dart'; import 'package:shuffle/features/auth/presentation/check_email/check_email_screen.dart'; import 'package:shuffle/features/auth/presentation/email_link/email_link_screen.dart'; import 'package:shuffle/features/auth/presentation/forgot_password/forgot_password_screen.dart'; import 'package:shuffle/features/auth/presentation/login/login_screen.dart'; import 'package:shuffle/features/auth/presentation/register/register_screen.dart'; import 'package:shuffle/features/auth/presentation/reset_password/reset_password_screen.dart'; /// Routes of the auth pages (Spec #1 ยง 5.3). final List authRoutes = [ GoRoute( path: AppRoutes.login, builder: (context, state) => LoginScreen(from: state.uri.queryParameters[AppRoutes.fromParam]), ), GoRoute( path: AppRoutes.register, builder: (context, state) => RegisterScreen(from: state.uri.queryParameters[AppRoutes.fromParam]), routes: [ GoRoute( path: 'check-email', builder: (context, state) { // The address travels as `extra`, never in the URL. go_router would // persist `extra` in the browser history; the router's // `VolatileExtraCodec` prevents that. After a web reload it is gone; // the screen then asks for it. final extra = state.extra; return CheckEmailScreen(email: extra is String ? extra : null); }, ), ], ), GoRoute( path: AppRoutes.forgotPassword, builder: (context, state) => ForgotPasswordScreen( from: state.uri.queryParameters[AppRoutes.fromParam], ), routes: [ GoRoute( path: 'check-email', // The mode is part of the path, so it survives a web reload. builder: (context, state) => const CheckEmailScreen(mode: CheckEmailMode.reset), ), ], ), GoRoute( path: AppRoutes.authConfirm, builder: (context, state) => EmailLinkScreen( tokenHash: state.uri.queryParameters['token_hash'], type: state.uri.queryParameters['type'], ), ), GoRoute( path: AppRoutes.resetPassword, builder: (context, state) => const ResetPasswordScreen(), ), ];