flutter页面间的跳转有两种方式,一种动态构建路由的方式,一种提前命名路由的方式。
构建路由方式
push方法:直接跳转到下个页面,可以传递参数
Navigator.of(context).push(
new MaterialPageRoute(builder: (BuildContext context) {
//TextWdigetPage要跳转的页面
//title要传递的参数
return TextWdigetPage(title: "传递的参数");
}))
),
或者
Navigator.push(context,
new MaterialPageRoute(builder: (BuildContext context) {
return TextWdigetPage(title: "传递的参数");
})
)
pushAndRemoveUntil方式:跳转到下个页面,并且销毁当前页面
//第一个为上下文环境,
// 第二个参数为静态注册的对应的页面名称,
// 第三个参数为跳转后的操作,route == null 为销毁当前页面
Navigator.pushAndRemoveUntil(context,
new MaterialPageRoute(builder: (BuildContext context) {
return TextWdigetPage(title: "传递的参数");
}), (route) => route == null
)
提前命名路由
不能传递参数,只能在mian.dart里面写死要跳转的路由协议
routes: {
"listview_builder_page": (BuildContext context) =>
new ListView_Builder_Page(),
"listview_separated_page": (BuildContext context) =>
new ListView_Separated_Page(),
},
);
}
调用时可以用以下方式:
Navigator.pushNamed(context, "listview_builder_page")
或者
Navigator.pushNamedAndRemoveUntil(
context, "listview_builder_page", (router) => router == null)
),
页面的销毁:
//构建路由
//一个参数,为上下文环境,销毁当前页面
Navigator.pop(context);
//一个参数,第一个为上下文环境,第二个为要携带的参数,销毁当前页面
Navigator.pop(context, "携带参数");
//命名路由
Navigator.popAndPushNamed(context, 'listview_builder_page')
接收路由返回的参数
//构建路由
1.
Navigator.push(context,
new MaterialPageRoute(builder: (BuildContext context) {
return TextWdigetPage(title: "传递的参数");
})
).then((Object result) {
print("返回值:${result.toString()}");
})
2.
()async {
var result =await Navigator.push(context,
new MaterialPageRoute(builder: (BuildContext context) {
return TextWdigetPage(title:"传递的参数");
})
);
print("返回值:${result.toString()}");
}
3.
Navigator.pushAndRemoveUntil(context,
new MaterialPageRoute(builder: (BuildContext context) {
return TextWdigetPage(title: "传递的参数");
}), (route) => route == null
).then((Object result) {
print("返回值:${result.toString()}");
})
4.命名路由
Navigator.pushNamed(context, "listview_builder_page").then((Object result) {
print("返回值:${result.toString()}");
})
练习demo,链接https://gitee.com/xgljh/Flutter