Flutter:自动路由:RouteGuard 在 AutoTabsScaffold 中不起作用

iam*_*ink 6 routes flutter flutter-routes

我正在尝试为我的 AutoTabsScaffold [bottom nav] 添加身份验证防护,但它不起作用,它可以在其他导航页面中工作,但不仅仅在我的登陆页面内 [其中 AutoTabsScaffold| 底部导航位于]我在这里遗漏了什么吗?

使用:auto_route: ^3.2.4 [pub.dev]

类登陆页面

   return AutoTabsScaffold(

      backgroundColor: Theme
          .of(context)
          .scaffoldBackgroundColor,
        routes: const [
          HomeRouter(),
          CategoryRouter(),
          OrderRouter(),
          ProfileRoute(),
      ],
      bottomNavigationBuilder: (_, tabsRouter) {return}
Run Code Online (Sandbox Code Playgroud)

类授权守卫:

class RouteGuard extends AutoRedirectGuard {
  final AuthService authService;

  RouteGuard(this.authService) {
    authService.addListener(() {
      if (!authService.authenticated) {
        // should be called when the logic effecting this guard changes
        // e.g when the user is no longer authenticated
        reevaluate();
      }
    });
  }

  @override
  void onNavigation(NavigationResolver resolver, StackRouter router) {
    if (authService.authenticated) return resolver.next();
    router.push(
      LoginRoute(
        onLoginCallback: (_) {
          resolver.next();
          router.removeLast();
        },
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

路由器.dart

@MaterialAutoRouter(
  replaceInRouteName: 'Page|Screen,Route',
  routes: <AutoRoute>[
    AutoRoute(page: OrderPreviewPage),
    AutoRoute(page: AddCardPage,),
    AutoRoute(page: PaymentPage,),
    AutoRoute(page: SplashPage, initial: true),
    AutoRoute(page: MyCartPage,),
    AutoRoute(page: IntroPage),
    AutoRoute(page: RegisterPage),
    AutoRoute(page: ProductDetailPage),
    AutoRoute(page: ProductListingPage),
    AutoRoute(page: CartSummaryPage,),
    AutoRoute(page: LoginPage, path: 'login'), //name: 'LoginRoute'
    AutoRoute(
      initial: true,
      page: LandingPage,

      path: 'landing',
      children: [
        AutoRoute(
          path: '',
          name: 'homeRouter',
          page: HomePage,
        ),
        AutoRoute(
          path: 'category',
          name: 'categoryRouter',
          page: CategoryPage,
        ),
        AutoRoute(
          path: 'orders',
          name: 'orderRouter',
          page: OrdersPage,
        ),
        AutoRoute(
          path: 'profile',
          guards: [RouteGuard],    //<------- here registered router guard but not working in Tabscaffold page
          page: ProfilePage,
        ),
        // RedirectRoute(path: '*', redirectTo: ''),

      ],
    ),
  ],
)
Run Code Online (Sandbox Code Playgroud)

尝试在底部导航中添加路线防护,但它没有按我的预期工作。我在这里缺少什么?Github 问题

A L*_*ent -1

我有一个类似的结构,对我来说,它的工作原理是在您的着陆案例中的嵌套导航顶部添加防护:

AutoRoute(
  initial: true,
  page: LandingPage,
  guards: [RouteGuard],   
  path: 'landing',
Run Code Online (Sandbox Code Playgroud)