Как я могу использовать аргументы, передаваемые с помощью pushNamed? - PullRequest
1 голос
/ 24 октября 2019

Допустим, у меня есть два маршрута / firstRoute и / secondRoute , оба для виджетов FirstRoute и SecondRoute соответственно. Я помещаю именованный маршрут в стек с некоторыми аргументами, например так ...

Navigator.pushNamed(
    context,
    "/secondRoute",
    arguments: <String, String>{"key" : "value"},
)

Как теперь я могу использовать это значение в SecondRoute ? Посмотрел документы, но там ничего не сказано.

Ответы [ 2 ]

2 голосов
/ 24 октября 2019

Создать класс для аргументов:

class ScreenArguments {
  final String title;
  final String message;

  ScreenArguments(this.title, this.message);
}

И извлечь их из виджета:

class ExtractArgumentsScreen extends StatelessWidget {
  static const routeName = '/extractArguments';

  @override
  Widget build(BuildContext context) {
    // Extract the arguments from the current ModalRoute settings and cast
    // them as ScreenArguments.
    final ScreenArguments args = ModalRoute.of(context).settings.arguments;

    return Scaffold(
      appBar: AppBar(
        title: Text(args.title),
      ),
      body: Center(
        child: Text(args.message),
      ),
    );
  }
}

И для отправки параметров:

Navigator.pushNamed(
  context,
  ExtractArgumentsScreen.routeName,
  arguments: ScreenArguments(
    'Extract Arguments Screen',
    'This message is extracted in the build method.',
  ),
);
0 голосов
/ 25 октября 2019

Использование ModalRoute.of(context).settings.arguments

Внутри вашего метода построения /secondRoute:

final args = ModalRoute.of(context).settings.arguments as Map<String, String>;
final arg1 = args["key"];
...