發表日期:2018-11 文章編輯:小燈 瀏覽次數:10771
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里面寫死要跳轉的路由協議
@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];
? ? ? ? ? ? ? ? ? ? }))
? ? ? ? ? ? );
? ? ? ? ? }),
? ? ),
? ? //不能傳遞參數,必須在main里面注冊
? ? 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');
接收路由返回的參數:
//構建路由
Navigator.push(context,
? ? new MaterialPageRoute(builder: (BuildContext context) {
? ? ? return TextWdigetPage(title: "傳遞的參數");
? ? })
).then((Object result) {
? ??? print("返回值:${result.toString()}");
})
Navigator.pushAndRemoveUntil(context,
? ? new MaterialPageRoute(builder: (BuildContext context) {
? ? ? return TextWdigetPage(title: "傳遞的參數");
? ? }), (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
日期:2018-10 瀏覽次數:7253
日期:2018-12 瀏覽次數:4328
日期:2018-07 瀏覽次數:4876
日期:2018-12 瀏覽次數:4174
日期:2018-09 瀏覽次數:5502
日期:2018-12 瀏覽次數:9922
日期:2018-11 瀏覽次數:4804
日期:2018-07 瀏覽次數:4578
日期:2018-05 瀏覽次數:4859
日期:2018-12 瀏覽次數:4324
日期:2018-10 瀏覽次數:5139
日期:2018-12 瀏覽次數:6212
日期:2018-11 瀏覽次數:4464
日期:2018-08 瀏覽次數:4592
日期:2018-11 瀏覽次數:12629
日期:2018-09 瀏覽次數:5579
日期:2018-12 瀏覽次數:4831
日期:2018-10 瀏覽次數:4187
日期:2018-11 瀏覽次數:4528
日期:2018-12 瀏覽次數:6063
日期:2018-06 瀏覽次數:4007
日期:2018-08 瀏覽次數:5436
日期:2018-10 瀏覽次數:4457
日期:2018-12 瀏覽次數:4525
日期:2018-07 瀏覽次數:4362
日期:2018-12 瀏覽次數:4500
日期:2018-06 瀏覽次數:4383
日期:2018-11 瀏覽次數:4375
日期:2018-12 瀏覽次數:4249
日期:2018-12 瀏覽次數:5283
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.