Skip to content

Commit 9a8faaf

Browse files
committed
refactor: login page "pops"
1 parent 0c0bb1b commit 9a8faaf

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

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

@@ -28,20 +29,33 @@ class AppRouter extends _$AppRouter {
2829
transitionsBuilder: TransitionsBuilders.slideLeftWithFade,
2930
);
3031

32+
@override
33+
Future<void> onNavigation(
34+
NavigationResolver resolver,
35+
StackRouter router,
36+
) async {
37+
// final authState = null;
38+
39+
log.info("${resolver.route.name} (${AuthRoute.name})");
40+
41+
if (resolver.route.name == AuthRoute.name) {
42+
resolver.next(); // continue navigation
43+
} else {
44+
// else we navigate to the Login page so we get authenticated
45+
46+
// tip: use resolver.redirect to have the redirected route
47+
// automatically removed from the stack when the resolver is completed
48+
await resolver.redirect(const AuthRoute()).then(
49+
(didLogin) => resolver.next((didLogin ?? false) as bool),
50+
);
51+
}
52+
}
53+
3154
@override
3255
List<AutoRoute> get routes => [
3356
AutoRoute(
3457
page: WrapperRoute.page,
3558
path: "/",
36-
guards: [
37-
AutoRouteGuard.redirect(
38-
(resolver) {
39-
final authState = ref.read(userProvider).valueOrNull;
40-
41-
return (authState != null) ? null : const AuthRoute();
42-
},
43-
),
44-
],
4559
children: [
4660
AutoRoute(
4761
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
@@ -6,12 +6,11 @@ import "package:auto_size_text/auto_size_text.dart";
66
import "package:flutter/material.dart";
77
import "package:hooks_riverpod/hooks_riverpod.dart";
88

9-
import "../../../../app/app_router.dart";
109
import "../../../../l10n/l10n.dart";
1110
import "../../application/auth_service.dart";
1211

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

4039
if (context.mounted) {
41-
await context.router.push(const DashboardRoute());
40+
await context.router.pop<bool>(true);
4241
}
4342
},
4443
icon: const Icon(Icons.g_mobiledata),
@@ -52,7 +51,7 @@ class AuthPage extends ConsumerWidget {
5251
.anonymous();
5352

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

0 commit comments

Comments
 (0)