创建一个可以携带参数的flutter命名路由
MaterialApp提供了一个属性onGenerateRoute,需要一个返回Route<dynamic>
,并接受RouteSettings
参数的函数
首先创建一个Router类,并且创建一个静态函数,settings包括路由的名称和参数
1 | class Router { |
为了避免我们的代码出现错误,我们将采用硬编码的方式定义路由名称,并放到全局可以访问的constant.dart文件中1
2const String homeRoute = '/';
const String feedRoute = '/feed';
switch case语句之后更改为1
2
3
4
5
6case homeRoute: return MaterialPageRoute(
builder: (_) => Home()
),
case feedRoute: return MaterialPageRoute(
builder: (_) => Feed()
),
之后,在定义MaterialApp应用程序时,generateRoute函数传递给onGenerateRoute,通过initialRoute配置起始视图1
2
3
4
5
6
7
8
9class MyApp extends StatelessWidget {
@override
Widget build (BuildContext context) {
return MaterialApp (
onGenerateRoute: Router.generateRoute,
initialRoute: homeRoute
)
}
}
这时,当你需要导航时,只需要使用1
Navigator.pushNamed(context, feedRoute);
如果需要传递参数1
2
3
4
5
6Navigator.pushNamed(context, feedRoute, arguments: '传递的参数');
case feedRoute:
var data = settins.arguments as String;
return MaterialPageRoute(
builder: (_) => Feed(data)
),