Getx example_nav2 https://github.com/jonataslaw/getx/tree/master/example_nav2
my 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),
],
),
]
)
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);
}
}
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");
Without EnsureAuthSeller (GetMiddleware) => result = {"productInfos":"test"}
With EnsureAuthSeller (GetMiddleware) => result = null
Why ? and what is the best way ?
You are creating a new GetNavConfig
using only the location. You should just return the existing GetNavConfig
from the parameter:
if (role == "seller") {
return route;
}