一簇秒、路由管理及相關(guān)概念
1. 路由
路由(Route)在移動開發(fā)中通常指頁面(Page)或者屏幕(Screen)敷存,Route在Android中通常指一個Activity慨蛙,在iOS中指一個ViewController梆掸。
2. 路由管理
路由管理是管理頁面之間如何跳轉(zhuǎn)瘪贱,通常也可被稱為導(dǎo)航管理纱控。Flutter中的路由管理和原生開發(fā)類似,無論是Android還是iOS菜秦,導(dǎo)航管理都會維護一個路由棧甜害,路由入棧(push)操作對應(yīng)打開一個新頁面,路由出棧(pop)操作對應(yīng)頁面關(guān)閉操作球昨,而路由管理主要是指如何來管理路由棧尔店。
二、路由基本使用
1. 頁面跳轉(zhuǎn)
Navigator.push將一個頁面插入到棧的頂部主慰,如下案例是點擊條目跳轉(zhuǎn)到WebScreen界面:
return InkWell(
onTap: () {
Navigator.push(context, MaterialPageRoute(builder: (context) {
return WebViewScreen()
}));
//或者
Navigator.of(context).push(MaterialPageRoute(builder: (context) {
return WebViewScreen();
}));
},
- 跳轉(zhuǎn)并關(guān)閉:
Navigator.of(context).pushAndRemoveUntil(
new MaterialPageRoute(builder: (context) => MainScreen()),
(route) => route == null);
2.頁面跳轉(zhuǎn)傳值
頁面跳轉(zhuǎn)有時是要傳遞數(shù)據(jù)嚣州,比如點擊條目跳轉(zhuǎn)到WebScreen需要帶標題和地址過去,或者條目跳轉(zhuǎn)到商品詳情頁需要帶id過去共螺,通過構(gòu)造函數(shù)傳值過去:
return InkWell(
onTap: () {
Navigator.push(context, MaterialPageRoute(builder: (context) {
return WebViewScreen(title: item.title, url: item.link);
}));
},
3. 頁面跳轉(zhuǎn)回傳值
類似安卓中的activity回傳數(shù)據(jù)
①跳轉(zhuǎn)并等待接收數(shù)據(jù)
class _AnflyScreen extends State<AnflyScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
onPressed: () {
_navigationToBigflyScreen(context);
},
child: Text('跳轉(zhuǎn)到Bigfly界面'),
),
),
);
}
//跳轉(zhuǎn)到第二個界面该肴,必須聲明為一個異步方法,因為我們要等待接收返回的數(shù)據(jù)
void _navigationToBigflyScreen(BuildContext context) async {
//壓棧操作并等待返回數(shù)九
final result = await Navigator.push(
context, MaterialPageRoute(builder: (context) => BigflyScreen()));
//讀取并顯示返回值
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('$result'),
));
}
}
②第二個頁面帶上參數(shù)出棧
class _BigflyScreen extends State<BigflyScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("BigflyScreen"),
),
body: Center(
child: RaisedButton(
child: Text('點我退出'),
onPressed: () {
Navigator.pop(context, "我是來自BigFly界面數(shù)據(jù)");
},
),
),
);
}
}