import "package:auto_route/auto_route.dart"; import "package:flutter/material.dart"; import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:smol_mail/presentation/routes/home_guard.dart"; import "package:smol_mail/presentation/routes/identity_guard.dart"; import "app_router.gr.dart"; /// A DialogRoute is a PageRoute whose settings carry the AutoRoutePage, so /// auto_route's setNewRoutePath — which pops pageless top routes before /// resolving a platform link — leaves dialog pages standing. Route dialogRouteBuilder( BuildContext context, Widget child, AutoRoutePage page, ) => DialogRoute( context: context, settings: page, builder: (ctx) => child, ); @AutoRouterConfig(replaceInRouteName: "Screen,Route") class AppRouter extends RootStackRouter { final WidgetRef ref; AppRouter(this.ref); @override List get routes => [ AutoRoute( page: OnboardingRoute.page, path: "/", initial: true, guards: [HomeGuard(ref)], ), AutoRoute( page: HomeRoute.page, path: "/home", guards: [IdentityGuard(ref)], children: [ AutoRoute(page: InboxRoute.page, path: "inbox", initial: true), AutoRoute(page: ContactsRoute.page, path: "contacts"), AutoRoute(page: SettingsRoute.page, path: "settings"), ], ), AutoRoute( page: MessageDetailRoute.page, path: "/message", guards: [IdentityGuard(ref)], ), AutoRoute( page: ComposeRoute.page, path: "/compose", guards: [IdentityGuard(ref)], ), AutoRoute( page: ContactDetailRoute.page, path: "/contact", guards: [IdentityGuard(ref)], ), CustomRoute( page: ImportContactDialogRoute.page, path: "/import", customRouteBuilder: dialogRouteBuilder, guards: [IdentityGuard(ref)], ), ]; }