Flutter:Autoroute:RouteGuard 在 AutoTabsScaffold 中不工作

标签 flutter routes flutter-routes

我正在尝试为我的 AutoTabsScaffold [bottom nav] 添加 auth guard 但它不起作用,它在其他导航页面中工作但不只是在我的登录页面中 [其中 AutoTabsScaffold|底部导航位于] 我在这里遗漏了什么吗?

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

登陆页面类

   return AutoTabsScaffold(

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

类认证守卫:

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();
        },
      ),
    );
  }
}

路由器.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: ''),

      ],
    ),
  ],
)

尝试在底部导航中添加路由守卫,但它没有像我预期的那样工作。我在这里缺少什么?

最佳答案

我有一个类似的结构,对我来说,它的工作原理是在你着陆的情况下在嵌套导航的顶部添加守卫:

AutoRoute(
  initial: true,
  page: LandingPage,
  guards: [RouteGuard],   
  path: 'landing',

关于Flutter:Autoroute:RouteGuard 在 AutoTabsScaffold 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72013662/

相关文章:

dart - 您可以在关闭时收听 ShowBottomSheet 吗?

flutter - Flutter 应用程序中最好的路由方式是什么

flutter - 使用 page_transition 更改 Navigator.pop() 动画持续时间

node.js - 无法获取在 Nodejs 中工作的路由

javascript - node.js Express router.post 给出 404

rest - RSpec "No routes matches"

android - 如何防止 iOS 和 Android 上基于 flutter 的应用程序进行屏幕录制?

c# - 如何解决 FileSystemException : Cannot retrieve length of file, path ='...' (OS Error : No such file or directory, errno = 2)

dart - 如何将图像背景分配给 flutter 中的列