第一步配置路由
1 新建routes_mamager.dart文件
//第一步配置路由
final routes = {
//無參數(shù)傳遞
'/': (context) => MainContent(),
//有參數(shù)傳遞,ProductList構(gòu)造
//final Map arguments;
//ProductList({Key key, this.arguments}) : super(key: key) {}
'/product': (context, {arguments}) => ProductList(arguments: arguments)
};
//固定寫法
// ignore: strong_mode_top_level_function_literal_block
var onGenerateRoute = (RouteSettings settings) {
final String name = settings.name;
final Function pageContentBuilder = routes[name];
if (pageContentBuilder != null) {
if (settings.arguments != null) {
final Route route = MaterialPageRoute(
builder: (context) =>
pageContentBuilder(context, arguments: settings.arguments));
return route;
} else {
final Route route =
MaterialPageRoute(builder: (context) => pageContentBuilder(context));
return route;
}
}
};
2 在Flutter的入口出初始化路由:
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
initialRoute: '/', //初始化的時候加載的路由
onGenerateRoute: onGenerateRoute,
);
}
3 使用
傳參有返回值,arguments是傳到下一級的參數(shù),then((value))接收上級返回傳回的參數(shù)
Navigator.pushNamed(context, '/product', arguments: {'pid': 456})
.then((value) {//"this is data"
setState(() {
name = value;
});
});
返回上級界面有返回值
Navigator.pop(context, "this is data");
無參數(shù)返回值
Navigator.pushNamed(context, '/product');
替換路由
Navigator.pushReplacementNamed(context, '/');
返回根
Navigator.of(context).pushAndRemoveUntil(new MaterialPageRoute(builder: (context)=> new Tabs()), (route)=> route==null );