发表日期:2018-11 文章编辑:小灯 浏览次数:10858
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 浏览次数:7403
日期:2018-12 浏览次数:4473
日期:2018-07 浏览次数:5005
日期:2018-12 浏览次数:4305
日期:2018-09 浏览次数:5644
日期:2018-12 浏览次数:10053
日期:2018-11 浏览次数:4947
日期:2018-07 浏览次数:4715
日期:2018-05 浏览次数:4986
日期:2018-12 浏览次数:4446
日期:2018-10 浏览次数:5268
日期:2018-12 浏览次数:6342
日期:2018-11 浏览次数:4597
日期:2018-08 浏览次数:4723
日期:2018-11 浏览次数:12799
日期:2018-09 浏览次数:5722
日期:2018-12 浏览次数:4967
日期:2018-10 浏览次数:4312
日期:2018-11 浏览次数:4662
日期:2018-12 浏览次数:6188
日期:2018-06 浏览次数:4133
日期:2018-08 浏览次数:5578
日期:2018-10 浏览次数:4584
日期:2018-12 浏览次数:4668
日期:2018-07 浏览次数:4496
日期:2018-12 浏览次数:4642
日期:2018-06 浏览次数:4516
日期:2018-11 浏览次数:4500
日期:2018-12 浏览次数:4386
日期:2018-12 浏览次数:5397
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.