之前可能会被问到但是我找不到它,但是你如何将参数传递给命名路线?
这就是我构建路线的方式
Widget build(BuildContext context) { return new Navigator( initialRoute: 'home/chooseroom',onGenerateRoute: (RouteSettings settings) { WidgetBuilder builder; switch (settings.name) { case 'home/chooseroom': // navigates to 'signup/choose_credentials'. builder = (BuildContext _) => new ChoosePage(); break; case 'home/createpage': builder = (BuildContext _) => new CreateRoomPage(); break; case 'home/presentation': builder = (BuildContext _) => new Presentation(); break; default: throw new Exception('Invalid route: ${settings.name}'); } return new MaterialPageRoute(builder: builder,settings: settings); },);
这就是你怎么称呼它
Navigator.of(上下文).pushNamed( ‘家/演示文稿’)
但是如果我的小部件是新的演示文稿(arg1,arg2,arg3)怎么办?
解决方法
基本上你有2个选择:
>使用一些第三方软件包进行路由 – 我认为最好的是Fluro.
>利用onGenerateRoute.此选项仅限于您可以传递的参数(字符串/数字)
要使用第二个选项,假设您要传递三个参数:Navigator.of(context).pushNamed(‘home / presentation:arg1:1337:hello’)
MaterialApp ( ...,onGenerateRoute: handleRoute,routes:...,) Route<dynamic> handleRoute(RouteSettings settings) { WidgetBuilder builder; final List<String> uri = settings.name.split('/'); if (uri[0].startsWith('home')) { // handle all home routes: if(uri[1].startsWith('presentation:'){ // cut slice by slice final String allArgs = uri[1].substring('presentation:'.length); final List<String> args = allArgs.split(':'); // use your string args print(args[0]); // prints "arg1" int x = int.parse(args[1]); // becomes 1337 print(args[2]); // prints "hello" builder = (ctx)=> Presentation(args[0],args[1],args[2]); ...