getx icon indicating copy to clipboard operation
getx copied to clipboard

getx middleware and route arguments (GetX example_nav2)

Open progrems opened this issue 3 years ago • 1 comments
trafficstars

Bug description Routes arguments get null when i use middleware.

**Reproduction code

  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. 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. Passing arguments from Routes.sellerProducts to Routes.sellerAddProduct

Routes.sellerProducts :

Map<String, String> productDetails = {"productInfos":"test"};
print("productDetails arguments sender = $productDetails");
Get.rootDelegate.toNamed(Routes.sellerAddProduct, arguments: productDetails);

Routes.sellerAddProduct :

final productDetails = Get.rootDelegate.arguments();
print("productDetails arguments receiver = $productDetails");

To Reproduce Steps to reproduce the behavior:

  1. Without EnsureAuthSeller (GetMiddleware)

[GETX] GOING TO ROUTE / [GETX] Instance "SellerDashBoardRootViewController" has been created [GETX] Instance "SellerDashBoardRootViewController" has been initialized [GETX] Instance "SellerProductsController" has been created [GETX] Instance "SellerProductsController" has been initialized [GETX] Instance "SellerStockController" has been created [GETX] Instance "SellerStockController" has been initialized productDetails arguments sender = {productInfos: test} [GETX] Instance "SellerAddProductController" has been created [GETX] Instance "SellerAddProductController" has been initialized productDetails arguments receiver = {productInfos: test}

  1. With EnsureAuthSeller (GetMiddleware)

[GETX] GOING TO ROUTE / [GETX] Redirect to null [GETX] Instance "SellerDashBoardRootViewController" has been created [GETX] Instance "SellerDashBoardRootViewController" has been initialized 2[GETX] Redirect to null [GETX] Instance "SellerStockController" has been created [GETX] Instance "SellerStockController" has been initialized productDetails arguments sender = {productInfos: test} [GETX] Redirect to null [GETX] Instance "SellerAddProductController" has been created [GETX] Instance "SellerAddProductController" has been initialized productDetails arguments receiver = null

  1. See error productDetails arguments receiver = null

Expected behavior Obtain arguments passed.

Flutter Version: [✓] Flutter (Channel stable, 3.0.0, on macOS 12.3.1 21E258 darwin-arm, locale en-CA) [✓] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1) [✓] Xcode - develop for iOS and macOS (Xcode 13.4) [✓] Chrome - develop for the web [✓] Android Studio (version 2021.1) [✓] VS Code (version 1.67.2) [✓] Connected device (2 available) [✓] HTTP Host Availability

Getx Version: get: ^4.6.4

Describe on which device you found the bug: Any device.

progrems avatar May 23 '22 14:05 progrems

Any update ?

mattar88 avatar Jul 16 '22 08:07 mattar88

Any update on this? if yes provide some code @jonataslaw

asifakhtar98 avatar Oct 02 '23 18:10 asifakhtar98