Skip to content

Commit 0e27a38

Browse files
committed
refactor: login page "pops"
1 parent 2d42097 commit 0e27a38

2 files changed

Lines changed: 27 additions & 14 deletions

File tree

lib/app/app_router.dart

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ import "../features/dashboard/presentation/wrapper_page/wrapper_page.dart";
1111
import "../features/gpa_calculator/presentation/gpa_page/gpa_page.dart";
1212
import "../features/pirate_coins/presentation/pirate_coins_page/pirate_coins_page.dart";
1313
import "../features/pirate_coins/presentation/stats_page/stats_page.dart";
14+
import "../utils/log.dart";
1415

1516
part "app_router.gr.dart";
1617

1718
/// The router for the application.
1819
@AutoRouterConfig(replaceInRouteName: "Page,Route")
19-
class AppRouter extends _$AppRouter {
20+
class AppRouter extends _$AppRouter implements AutoRouteGuard {
2021
/// Create a new instance of [AppRouter].
2122
AppRouter({required this.ref});
2223

@@ -26,20 +27,33 @@ class AppRouter extends _$AppRouter {
2627
@override
2728
final defaultRouteType = const RouteType.material();
2829

30+
@override
31+
Future<void> onNavigation(
32+
NavigationResolver resolver,
33+
StackRouter router,
34+
) async {
35+
// final authState = null;
36+
37+
log.info("${resolver.route.name} (${AuthRoute.name})");
38+
39+
if (resolver.route.name == AuthRoute.name) {
40+
resolver.next(); // continue navigation
41+
} else {
42+
// else we navigate to the Login page so we get authenticated
43+
44+
// tip: use resolver.redirect to have the redirected route
45+
// automatically removed from the stack when the resolver is completed
46+
await resolver.redirect(const AuthRoute()).then(
47+
(didLogin) => resolver.next((didLogin ?? false) as bool),
48+
);
49+
}
50+
}
51+
2952
@override
3053
List<AutoRoute> get routes => [
3154
AutoRoute(
3255
page: WrapperRoute.page,
3356
path: "/",
34-
guards: [
35-
AutoRouteGuard.redirect(
36-
(resolver) {
37-
final authState = ref.read(userProvider).valueOrNull;
38-
39-
return (authState != null) ? null : const AuthRoute();
40-
},
41-
),
42-
],
4357
children: [
4458
AutoRoute(
4559
page: PirateCoinsRoute.page,

lib/features/auth/presentation/auth_page/auth_page.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@ import "package:auto_route/auto_route.dart";
55
import "package:flutter/material.dart";
66
import "package:hooks_riverpod/hooks_riverpod.dart";
77

8-
import "../../../../app/app_router.dart";
98
import "../../../../l10n/l10n.dart";
109
import "../../application/auth_service.dart";
1110

1211
/// The page located at `/login/`.
13-
@RoutePage()
12+
@RoutePage<bool>()
1413
class AuthPage extends ConsumerWidget {
1514
/// Create a new instance of [AuthPage].
1615
const AuthPage({super.key});
@@ -37,7 +36,7 @@ class AuthPage extends ConsumerWidget {
3736
.authenticate();
3837

3938
if (context.mounted) {
40-
await context.router.push(const DashboardRoute());
39+
await context.router.pop<bool>(true);
4140
}
4241
},
4342
icon: const Icon(Icons.g_mobiledata),
@@ -51,7 +50,7 @@ class AuthPage extends ConsumerWidget {
5150
.anonymous();
5251

5352
if (context.mounted) {
54-
await context.router.push(const DashboardRoute());
53+
await context.router.pop<bool>(true);
5554
}
5655
},
5756
icon: const Icon(Icons.person),

0 commit comments

Comments
 (0)