getx
getx copied to clipboard
getx middleware and route arguments (GetX example_nav2)
Bug description Routes arguments get null when i use middleware.
**Reproduction code
- 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);
}
}
- 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),
],
),
]
)
- 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:
- 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}
- 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
- 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.
Any update ?
Any update on this? if yes provide some code @jonataslaw