69 lines
2 KiB
Dart
69 lines
2 KiB
Dart
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<T> dialogRouteBuilder<T>(
|
|
BuildContext context,
|
|
Widget child,
|
|
AutoRoutePage<T> page,
|
|
) =>
|
|
DialogRoute<T>(
|
|
context: context,
|
|
settings: page,
|
|
builder: (ctx) => child,
|
|
);
|
|
|
|
@AutoRouterConfig(replaceInRouteName: "Screen,Route")
|
|
class AppRouter extends RootStackRouter {
|
|
final WidgetRef ref;
|
|
|
|
AppRouter(this.ref);
|
|
|
|
@override
|
|
List<AutoRoute> 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)],
|
|
),
|
|
];
|
|
}
|