發(fā)表日期:2018-11 文章編輯:小燈 瀏覽次數(shù):11010
flutter頁面間的跳轉(zhuǎn)有兩種方式,一種動態(tài)構(gòu)建路由的方式,一種提前命名路由的方式。
構(gòu)建路由方式
push方法:直接跳轉(zhuǎn)到下個頁面,可以傳遞參數(shù)
Navigator.of(context).push(
? ? new MaterialPageRoute(builder: (BuildContext context) {
//TextWdigetPage要跳轉(zhuǎn)的頁面
//title要傳遞的參數(shù)
? ? ? return TextWdigetPage(title: "傳遞的參數(shù)");
? ? }))
),
或者
Navigator.push(context,
? ? new MaterialPageRoute(builder: (BuildContext context) {
? ? ? return TextWdigetPage(title: "傳遞的參數(shù)");
? ? })
)
pushAndRemoveUntil方式:跳轉(zhuǎn)到下個頁面,并且銷毀當前頁面
//第一個小菜理解為上下文環(huán)境,
// 第二個參數(shù)為靜態(tài)注冊的對應的頁面名稱,
// 第三個參數(shù)為跳轉(zhuǎn)后的操作,route == null 為銷毀當前頁面
Navigator.pushAndRemoveUntil(context,
? ? new MaterialPageRoute(builder: (BuildContext context) {
? ? ? return TextWdigetPage(title: "傳遞的參數(shù)");
? ? }), (route) => route == null
)
提前命名路由
不能傳遞參數(shù),只能在mian.dart里面寫死要跳轉(zhuǎn)的路由協(xié)議
@override
Widget build(BuildContext context) {
? return MaterialApp(
? ? title: "flutter學習",
? ? home: Scaffold(
? ? ? appBar: AppBar(title: Text("flutter學習"),),
? ? ? body: ListView.builder(
? ? ? ? ? itemCount: list.length,
? ? ? ? ? itemBuilder: (context, position) {
? ? ? ? ? ? return HomeListItem(position, list[position], (index) =>
? ? ? ? ? ? ? ? Navigator.push(context,
? ? ? ? ? ? ? ? ? ? new MaterialPageRoute(builder: (BuildContext context) {
? ? ? ? ? ? ? ? ? ? ? return pageList[index];
? ? ? ? ? ? ? ? ? ? }))
? ? ? ? ? ? );
? ? ? ? ? }),
? ? ),
? ? //不能傳遞參數(shù),必須在main里面注冊
? ? routes: {
? ? ? "listview_builder_page": (BuildContext context) =>
? ? ? new ListView_Builder_Page(),
? ? ? "listview_separated_page": (BuildContext context) =>
? ? ? new ListView_Separated_Page(),
? ? },
? );
}
調(diào)用時可以用以下方式:
Navigator.pushNamed(context, "listview_builder_page")
或者
Navigator.pushNamedAndRemoveUntil(
? ? context, "listview_builder_page", (router) => router == null)
),
頁面的銷毀:
//構(gòu)建路由
//一個參數(shù),為上下文環(huán)境,銷毀當前頁面
Navigator.pop(context);
//一個參數(shù),第一個為上下文環(huán)境,第二個為要攜帶的參數(shù),銷毀當前頁面
Navigator.pop(context, "攜帶參數(shù)");
//命名路由
Navigator.popAndPushNamed(context, 'listview_builder_page');
接收路由返回的參數(shù):
//構(gòu)建路由
Navigator.push(context,
? ? new MaterialPageRoute(builder: (BuildContext context) {
? ? ? return TextWdigetPage(title: "傳遞的參數(shù)");
? ? })
).then((Object result) {
? ??? print("返回值:${result.toString()}");
})
Navigator.pushAndRemoveUntil(context,
? ? new MaterialPageRoute(builder: (BuildContext context) {
? ? ? return TextWdigetPage(title: "傳遞的參數(shù)");
? ? }), (route) => route == null
).then((Object result) {
???? print("返回值:${result.toString()}");
})
命名路由
Navigator.pushNamed(context, "listview_builder_page").then((Object result) {
?????? print("返回值:${result.toString()}");
})
練習demo,鏈接https://gitee.com/xgljh/Flutter