发表日期:2018-11 文章编辑:小灯 浏览次数:10770
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 浏览次数:7251
日期:2018-12 浏览次数:4325
日期:2018-07 浏览次数:4872
日期:2018-12 浏览次数:4172
日期:2018-09 浏览次数:5499
日期:2018-12 浏览次数:9919
日期:2018-11 浏览次数:4802
日期:2018-07 浏览次数:4576
日期:2018-05 浏览次数:4856
日期:2018-12 浏览次数:4324
日期:2018-10 浏览次数:5136
日期:2018-12 浏览次数:6210
日期:2018-11 浏览次数:4460
日期:2018-08 浏览次数:4590
日期:2018-11 浏览次数:12629
日期:2018-09 浏览次数:5578
日期:2018-12 浏览次数:4829
日期:2018-10 浏览次数:4185
日期:2018-11 浏览次数:4526
日期:2018-12 浏览次数:6061
日期:2018-06 浏览次数:4006
日期:2018-08 浏览次数:5434
日期:2018-10 浏览次数:4456
日期:2018-12 浏览次数:4522
日期:2018-07 浏览次数:4360
日期:2018-12 浏览次数:4499
日期:2018-06 浏览次数:4381
日期:2018-11 浏览次数:4373
日期:2018-12 浏览次数:4248
日期:2018-12 浏览次数:5279
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.