Как отправить параметры при навигации с помощью Navigator.pushNamed
Мне нужно отправить несколько параметров по названному маршруту. Я хотел бы сделать что-то вроде:
Navigator.pushNamed('/route/1');
Или же
Navigator.pushNamed('/route?param1=1');
Я не знаю, есть ли способ сделать это, я использую MaterialApp с маршрутизатором.
2 ответа
Первый способ - это то, что я использую в своем приложении.
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'));
},
Прямой ответ на ваш вопрос см. В следующем дубликате: как передать нестроковые данные на именованный маршрут во Flutter?
Однако в большинстве случаев лучший способ сделать это - не передавать параметры между маршрутами, а использовать управление состоянием приложения. Например, Redux или Bloc. Там, где вы обычно изменяете состояние на первом экране, затем переходите ко второму экрану и читайте состояние. Преимуществом этого является сохранение состояния и повторное открытие приложения в том же состоянии, в котором оно было закрыто. Для получения дополнительной информации о государственном управлении см. Официальные документы.