使用 Navigator.pushNamed 导航时如何发送参数
How to send parameters when navigating with Navigator.pushNamed
我需要将一些参数发送到命名路由。我想做类似的事情:
Navigator.pushNamed('/route/1');
或者
Navigator.pushNamed('/route?param1=1');
我不知道是否有办法做到这一点,我正在使用带有路由器的 MaterialApp。
要直接回答您的问题,请参阅此重复问题:How do I pass non-string data to a named route in Flutter?
然而,大多数时候最好的方法是不在路由之间传递参数,而是使用app-state-management。例如 Redux 或 Bloc。通常在第一个屏幕中修改状态,然后导航到第二个屏幕并读取状态。这样做的好处是能够保持状态并以与关闭时相同的状态重新打开您的应用程序。有关状态管理的更多信息,请参阅 official docs.
第一种方式是我在我的应用程序中使用的方式。
Navigator.pushNamed('/route/1');
不要忘记使用 onGenerateRoute 并传递值。
来自我的应用程序的示例:
routes: {
'/': (BuildContext context) => AuthPage(),
'/products': (BuildContext context) => ProductsPage(''),
'/admin': (BuildContext context) =>
ProductsAdminPage(_addProduct, _deleteProduct),
},
onGenerateRoute: (RouteSettings settings) {
final List<String> pathElements = settings.name.split('/');
if (pathElements[0] != '') {
return null;
}
if (pathElements[1] == 'product') {
return MaterialPageRoute<bool>(
builder: (BuildContext context) => ProductPage(pathElements[2]),
);
}
return null;
},
onUnknownRoute: (RouteSettings settings) {
return MaterialPageRoute(
builder: (BuildContext context) => ProductsPage('Error'));
},
我需要将一些参数发送到命名路由。我想做类似的事情:
Navigator.pushNamed('/route/1');
或者
Navigator.pushNamed('/route?param1=1');
我不知道是否有办法做到这一点,我正在使用带有路由器的 MaterialApp。
要直接回答您的问题,请参阅此重复问题:How do I pass non-string data to a named route in Flutter?
然而,大多数时候最好的方法是不在路由之间传递参数,而是使用app-state-management。例如 Redux 或 Bloc。通常在第一个屏幕中修改状态,然后导航到第二个屏幕并读取状态。这样做的好处是能够保持状态并以与关闭时相同的状态重新打开您的应用程序。有关状态管理的更多信息,请参阅 official docs.
第一种方式是我在我的应用程序中使用的方式。
Navigator.pushNamed('/route/1');
不要忘记使用 onGenerateRoute 并传递值。 来自我的应用程序的示例:
routes: {
'/': (BuildContext context) => AuthPage(),
'/products': (BuildContext context) => ProductsPage(''),
'/admin': (BuildContext context) =>
ProductsAdminPage(_addProduct, _deleteProduct),
},
onGenerateRoute: (RouteSettings settings) {
final List<String> pathElements = settings.name.split('/');
if (pathElements[0] != '') {
return null;
}
if (pathElements[1] == 'product') {
return MaterialPageRoute<bool>(
builder: (BuildContext context) => ProductPage(pathElements[2]),
);
}
return null;
},
onUnknownRoute: (RouteSettings settings) {
return MaterialPageRoute(
builder: (BuildContext context) => ProductsPage('Error'));
},