flutter頁(yè)面間的跳轉(zhuǎn)有兩種方式撮抓,一種動(dòng)態(tài)構(gòu)建路由的方式往衷,一種提前命名路由的方式骑篙。
構(gòu)建路由方式
push方法:直接跳轉(zhuǎn)到下個(gè)頁(yè)面削彬,可以傳遞參數(shù)
Navigator.of(context).push(
? ? new MaterialPageRoute(builder: (BuildContext context) {
//TextWdigetPage要跳轉(zhuǎn)的頁(yè)面
//title要傳遞的參數(shù)
? ? ? return TextWdigetPage(title: "傳遞的參數(shù)");
? ? }))
),
或者
Navigator.push(context,
? ? new MaterialPageRoute(builder: (BuildContext context) {
? ? ? return TextWdigetPage(title: "傳遞的參數(shù)");
? ? })
)
pushAndRemoveUntil方式:跳轉(zhuǎn)到下個(gè)頁(yè)面泣洞,并且銷毀當(dāng)前頁(yè)面
//第一個(gè)為上下文環(huán)境忧风,
// 第二個(gè)參數(shù)為靜態(tài)注冊(cè)的對(duì)應(yīng)的頁(yè)面名稱,
// 第三個(gè)參數(shù)為跳轉(zhuǎn)后的操作球凰,route == null 為銷毀當(dāng)前頁(yè)面
Navigator.pushAndRemoveUntil(context,
? ? new MaterialPageRoute(builder: (BuildContext context) {
? ? ? return TextWdigetPage(title: "傳遞的參數(shù)");
? ? }), (route) => route == null
)
提前命名路由
不能傳遞參數(shù)狮腿,只能在mian.dart里面寫(xiě)死要跳轉(zhuǎn)的路由協(xié)議
? ? routes: {
? ? ? "listview_builder_page": (BuildContext context) =>
? ? ? new ListView_Builder_Page(),
? ? ? "listview_separated_page": (BuildContext context) =>
? ? ? new ListView_Separated_Page(),
? ? },
? );
}
調(diào)用時(shí)可以用以下方式:
Navigator.pushNamed(context, "listview_builder_page")
或者
Navigator.pushNamedAndRemoveUntil(
? ? context, "listview_builder_page", (router) => router == null)
),
頁(yè)面的銷毀:
//構(gòu)建路由
//一個(gè)參數(shù),為上下文環(huán)境呕诉,銷毀當(dāng)前頁(yè)面
Navigator.pop(context);
//一個(gè)參數(shù)缘厢,第一個(gè)為上下文環(huán)境,第二個(gè)為要攜帶的參數(shù)甩挫,銷毀當(dāng)前頁(yè)面
Navigator.pop(context, "攜帶參數(shù)");
//命名路由
Navigator.popAndPushNamed(context, 'listview_builder_page')
接收路由返回的參數(shù)
//構(gòu)建路由
1.
Navigator.push(context,
? ? new MaterialPageRoute(builder: (BuildContext context) {
? ? ? return TextWdigetPage(title: "傳遞的參數(shù)");
? ? })
).then((Object result) {
? ??? print("返回值:${result.toString()}");
})
2.
()async {
var result =await Navigator.push(context,
? ? ? new MaterialPageRoute(builder: (BuildContext context) {
return TextWdigetPage(title:"傳遞的參數(shù)");
? ? ? })
);
? print("返回值:${result.toString()}");
}
3.
Navigator.pushAndRemoveUntil(context,
? ? new MaterialPageRoute(builder: (BuildContext context) {
? ? ? return TextWdigetPage(title: "傳遞的參數(shù)");
? ? }), (route) => route == null
).then((Object result) {
???? print("返回值:${result.toString()}");
})
4.命名路由
Navigator.pushNamed(context, "listview_builder_page").then((Object result) {
?????? print("返回值:${result.toString()}");
})
練習(xí)demo贴硫,鏈接https://gitee.com/xgljh/Flutter