【问题标题】:Flutter web : getx middleware and route arguments (GetX example_nav2)Flutter web:getx 中间件和路由参数(GetX example_nav2)
【发布时间】:2022-06-27 16:20:22
【问题描述】:
  1. Getx example_nav2 https://github.com/jonataslaw/getx/tree/master/example_nav2

  2. 我的 app_pages.dart

            GetPage(
            preventDuplicates: true,
            name: _Paths.sRoot,
            page: () => const SellerDashBoardRootView(),
            binding: SellerDashBoardRootViewBinding(),
            middlewares: [
              //only enter this route when user is a seller
              EnsureAuthSeller()
            ],
            children: [

              GetPage(
                name: _Paths.sellerDashboard,
                page: () => const SellerDashboardScreen(),
                binding: SellerDashboardBinding(),
                transition: Transition.fadeIn),

              GetPage(
                preventDuplicates: true,
                name: _Paths.sProductsRoot,
                page: () => const SellerProductsRootView(),
                binding: SellerProductsRootViewBinding(),
                transition: Transition.fadeIn,
              ),

              GetPage(
                name: _Paths.sellerProducts,
                page: () => const SellerProductsScreen(),
                binding: SellerProductsBinding(),
                transition: Transition.fadeIn,
                children: [

                  GetPage(
                  name: _Paths.sellerAddProduct,
                  page: () => const SellerAddProductScreen(),
                  binding: SellerAddProductBinding(),
                  transition: Transition.fadeIn),

                  GetPage(
                  name: _Paths.sellerStock,
                  page: () => const SellerStockScreen(),
                  binding: SellerStockBinding(),
                  transition: Transition.fadeIn),

                 ],
               ),
             ]
           )
  1. EnsureAuthSeller (GetMiddleware)
class EnsureAuthSeller extends GetMiddleware {
  @override
  Future<GetNavConfig?> redirectDelegate(GetNavConfig route) async {
    if (!AuthService().isLogin) {
      return null;
    } else {
      var role = await LocalStorageServices().getUserRole(keyRole);
      if (role != "seller") {
        return null;
      }
      if (role == "seller") {
        return GetNavConfig.fromRoute(route.location!);
      }
    }
    return await super.redirectDelegate(route);
  }
}
  1. 将参数从 Routes.sellerProducts 传递给 Routes.sellerAddProduct

Routes.sellerProducts:

Map<String, String> productDetails = {"productInfos":"test"};

Get.rootDelegate.toNamed(Routes.sellerAddProduct, arguments: productDetails);

Routes.sellerAddProduct :

final productDetails = Get.rootDelegate.arguments();
print("result = $productDetails");
  1. 结果

没有 EnsureAuthSeller (GetMiddleware) => 结果 = {"productInfos":"test"}

使用 EnsureAuthSeller (GetMiddleware) => 结果 = null

为什么?最好的方法是什么?

【问题讨论】:

    标签: flutter flutter-dependencies flutter-web flutter-getx


    【解决方案1】:

    您正在仅使用该位置创建一个新的GetNavConfig。您应该只从参数中返回现有的GetNavConfig

    if (role == "seller") {
        return route;
      }
    

    【讨论】:

      猜你喜欢
      • 2021-02-17
      • 1970-01-01
      • 2022-01-10
      • 2021-04-26
      • 2021-07-04
      • 2021-08-25
      • 2021-03-04
      • 2022-10-21
      • 2015-02-14
      相关资源
      最近更新 更多