我最近在我的项目中尝试了 flutter auto_route 包进行导航,因为使用用户身份验证处理导航对我来说总是具有挑战性,我总是试图找到一种让我的路径变得简单的方法。因此,在我当前的项目中,我决定使用 auto_route 因为它提供了一个保护屏幕的路由保护,并且为了进行身份验证,我使用 firebase auth 但问题是没有资源显示我们如何使用 auto_route 处理 firebase 身份验证官方文档没有详细提及路线守卫。
而且由于我是 auto_route 新手并且导航能力较弱,因此很难创建我的解决方案。因此,如果有人使用 auto_route 进行 Firebase 身份验证,那么您能否分享一些代码片段,或者您是否知道任何解释该过程逐步步骤的文章。 谢谢
是的,目前我在最新的导航项目中使用了 auto_route 包
当您的身份验证成功后,请将用户数据存储在配置单元中,并检查配置单元是否包含该密钥,然后导航到下一页,请参阅下面的代码
我做了很多研究,发现通过这种方式我创建了单个调用来管理导航
import 'package:auto_route/auto_route.dart';
import 'package:sspl_admin/src/global/user_data_util.dart';
import 'package:sspl_admin/src/model/user_modal.dart';
import 'package:sspl_admin/src/utils/hive/hive_utils.dart';
import 'routes.gr.dart';
@AutoRouterConfig(
replaceInRouteName: 'Page,Route',
)
class AppRouter extends $AppRouter {
@override
RouteType get defaultRouteType => const RouteType.material();
@override
final List<AutoRoute> routes = [
AutoRoute(
path: '/',
page: MenuBarRoute.page,
initial: true,
guards: [AuthGuard()],
children: [
AutoRoute(
path: 'deshboard',
page: Dashboard.page,
initial: true,
),
AutoRoute(
path: 'category',
page: CategoryRoute.page,
),
],
),
AutoRoute(
path: '/login-page',
page: LoginRoute.page,
),
];
}
class AuthGuard extends AutoRouteGuard {
@override
void onNavigation(NavigationResolver resolver, StackRouter router)
async {
// Check if the user is logged in.
bool isLoggedIn = HiveUtils.isContainKey(HiveKeys.userData);
// If the user is logged in, allow the navigation to proceed.
if (isLoggedIn) {
final UserDataUtils userDataUtils = UserDataUtils();
final Map<String, dynamic> data =
HiveUtils.get(HiveKeys.userData);
final UserData loginModel = UserData.fromJson(data);
userDataUtils.setUserData(loginModel);
resolver.next(true);
} else {
// If the user is not logged in, redirect the user to the login
page.
router.navigate(const LoginRoute());
}
}
}