Как отправить параметры при навигации с помощью 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. Там, где вы обычно изменяете состояние на первом экране, затем переходите ко второму экрану и читайте состояние. Преимуществом этого является сохранение состояния и повторное открытие приложения в том же состоянии, в котором оно было закрыто. Для получения дополнительной информации о государственном управлении см. Официальные документы.

Другие вопросы по тегам