带有 Firebase 身份验证的 Flutter 自动路由

问题描述 投票:0回答:1

我最近在我的项目中尝试了 flutter auto_route 包进行导航,因为使用用户身份验证处理导航对我来说总是具有挑战性,我总是试图找到一种让我的路径变得简单的方法。因此,在我当前的项目中,我决定使用 auto_route 因为它提供了一个保护屏幕的路由保护,并且为了进行身份验证,我使用 firebase auth 但问题是没有资源显示我们如何使用 auto_route 处理 firebase 身份验证官方文档没有详细提及路线守卫。

而且由于我是 auto_route 新手并且导航能力较弱,因此很难创建我的解决方案。因此,如果有人使用 auto_route 进行 Firebase 身份验证,那么您能否分享一些代码片段,或者您是否知道任何解释该过程逐步步骤的文章。 谢谢

flutter dart firebase-authentication flutter-dependencies mobile-application
1个回答
0
投票

是的,目前我在最新的导航项目中使用了 auto_route 包

  1. 当您的身份验证成功后,请将用户数据存储在配置单元中,并检查配置单元是否包含该密钥,然后导航到下一页,请参阅下面的代码

  2. 我做了很多研究,发现通过这种方式我创建了单个调用来管理导航

    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());
     }
    }
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.