Пример:

я много экранов, и я используюNavigator, Я хотел бы использовать «именованные маршруты», но мне также нужно передать нестроковые (например, изображения) моему следующему маршруту.

Я не могу использоватьpushNamed() потому что я не могу передать не строковые данные к нему.

Как я могу использовать именованный маршрут + отправить нестроковые данные?

Ответы на вопрос(3)

РЕДАКТИРОВАТЬ:

Теперь можно передавать сложные аргументыNavigator.pushNamed:

String id;
Navigator.pushNamed(context, '/users', arguments: id);

Затем он может быть использован вonGenerateRoute настроить построение маршрута с этими аргументами:

MaterialApp(
  title: 'Flutter Hooks Gallery',
  onGenerateRoute: (settings) {
    final arguments = settings.arguments;
    switch (settings.name) {
      case '/users':
        if (arguments is String) {
          // the details page for one specific user
          return UserDetails(arguments);
        }
        else {
          // a route showing the list of all users
          return UserList();
        }
      default:
        return null;
    }
  },
);
 Rémi Rousselet29 нояб. 2017 г., 20:02
Вместо этого я бы удалил первый «/» в маршруте. Но это всего лишь пример, вы можете использовать все, что хотите.
 Angel Todorov05 февр. 2019 г., 17:35
Вышеуказанный ответ остается в силе? Я не вижуarguments недвижимость доступна черезRouteSettings...
 Rémi Rousselet05 февр. 2019 г., 18:57
Это было добавлено совсем недавно. Вы можете переключиться на другой канал.
 Gogu29 нояб. 2017 г., 19:59
Если маршрут / myRoute / $ {myID}, разделение пути содержит 3 элемента в списке, первая из которых - пустая строка "". Возможно, мы должны игнорировать путь [0] и использовать пути [1] и путь [2]?
 Michał Powłoka19 февр. 2019 г., 19:30
Вот запрос на извлечение для этой функции:github.com/flutter/flutter/pull/27058

ссылка:https://pub.dartlang.org/packages/navigate

Это обеспечивает ваши ожидания и прост в использовании

Navigate.navigate(context,
                      "home",
                      transactionType:TransactionType.fromLeft , // optional
                      replaceRoute: ReplaceRoute.thisOne, //optional
                      arg: {"transactionType":TransactionType.fromLeft,"replaceRoute":ReplaceRoute.thisOne} //optional
                      );
 Duncan Jones26 дек. 2018 г., 10:20
Вам следуетупомяните вы автор из этого пакета.

а затем передаю их на страницу подтверждения, например:

   ImagePicker.pickImage(source: source).then((File file) {
    Navigator.push(
        context,
        MaterialPageRoute(
          builder: (context) => MediaCaptured(file: file),
        ));
  });

Вы можете легко сделать то же самое с любым типом файлов или нестроковых данных.

var foo = "non-string data";
Navigator.push(
        context,
        MaterialPageRoute(
          builder: (context) => MediaCaptured(foo: foo),
        ));

Назовите следующую страницу в маршруте по имени класса, как указано выше.

Просто убедитесь, что ваша новая страница принимает это в своем конструкторе.

 // Stateful Widget
class MediaCaptured extends StatefulWidget {
    MediaCaptured({ Key key, @required this.foo,}) : super(key: key);
    final var foo;
}

// StatelessWidget
class MediaCaptured extends StatelessWidget {
    MediaCaptured(this.foo);
    var foo;
}

Ваш ответ на вопрос