class MyRoutePath {
static String twoPage = '/twoPage';
static String homePage = '/homePage';
static String thirdPage = '/thirdPage';
}
class MyRoute {
static final Map<String, WidgetBuilder> sxRoutes = <String, WidgetBuilder>{
MyRoutePath.twoPage: (context, {arguments}) => TwoPagePage(arguments:arguments),
MyRoutePath.homePage: (context, {arguments}) => HomePagePage(arguments: arguments),
MyRoutePath.thirdPage: (context, {arguments}) => ThirdPage(arguments: arguments),
};
static Route<dynamic> onGenerateRoute(RouteSettings settings) {
return buildPage(settings.name, settings.arguments);
}
static Route<dynamic> buildPage(String settingsName, Object settingArguments) {
final String name = settingsName;
final Function pageContentBuilder = sxRoutes[name];
final dynamic arguments = settingArguments;
if (pageContentBuilder != null) {
print('Page:===== ${pageContentBuilder}');
if (arguments != null) {
final Route route = MaterialPageRoute(builder: (BuildContext context) {
return pageContentBuilder(context, arguments: arguments);
});
return route;
} else {
final Route route = MaterialPageRoute(builder: (BuildContext context) {
return pageContentBuilder(context);
});
return route;
}
} else {
print('没找到定义的路由');
}
}
}
使用
return MaterialApp(
...
onGenerateInitialRoutes: (settings) {
return [
MyRoute.buildPage(MyRoutePath.homePage, "我就是初始化参数"),
];
},
onGenerateRoute: (RouteSettings settings) {
return MyRoute.onGenerateRoute(settings);
},
}
HomePage
class HomePagePage extends StatelessWidget {
final dynamic arguments;
HomePagePage({this.arguments});
}
这样可以省去每次在Page页面获取setting 的传过来的参数
dynamic obj = ModalRoute.of(context).settings.arguments;
|