kirakira/lib/presentation/routes/app_router.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)],
),
];
}