Как отправить параметры при навигации с помощью Navigator.pushNamed - PullRequest
0 голосов
/ 15 января 2019

Мне нужно отправить несколько параметров по названному маршруту. Я хотел бы сделать что-то вроде:

Navigator.pushNamed('/route/1');

Или

Navigator.pushNamed('/route?param1=1');

Я не знаю, есть ли способ сделать это, я использую MaterialApp с маршрутизатором.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Первый способ - это то, что я использую в своем приложении.

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'));
      },
0 голосов
/ 15 января 2019

Прямой ответ на ваш вопрос см. В следующем дубликате вопроса: Как передать нестроковые данные в именованный маршрут во Flutter?

Однако в большинстве случаев лучший способ сделать это - не передавать параметры между маршрутами, а использовать управление состоянием приложения. Например, Redux или Bloc. Там, где вы обычно изменяете состояние на первом экране, затем переходите ко второму экрану и читайте состояние. Преимуществом этого является сохранение состояния и повторное открытие приложения в том же состоянии, в котором оно было закрыто. Для получения дополнительной информации об управлении состоянием см. Официальные документы 1008 *.

.
...