flutter頁面間跳轉和傳參-Navigator的使用
概述
flutter中的預設導航分成兩種,一種是命名的路由,一種是建構路由。
命名路由
這種路由需要一開始現在建立App的時候定義
new MaterialApp(
....
routes: {
"nameRoute":(BuildContext context)=>new SecondPage(),
},
);
然後就可以在程式中使用Navigator.pushNamed來跳轉
Navigator.pushNamed(context, "nameRoute");
這種路由的缺點是不能傳遞參數。
建構路由
在push的時候使用自定義方法建構一個路由
Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context){
return new ThirdPage(title:"請輸入昵稱");
}))
這種方式就可以傳遞參數了。
- 傳回上一頁并攜帶參數
使用Navigator的pop傳回可傳回上一級,并攜帶一個參數
Navigator.pop(context,"攜帶參數");
- 接收路由傳回的參數
注意push系列的方法傳回值是一個Future,可以用來接收參數
Navigator.pushNamed<String>(context, "nameRoute").then( (String value){
//處理代碼
});
Navigator.push<String>(context, new MaterialPageRoute(builder: (BuildContext context){
return new ThirdPage(title:"請輸入昵稱");
})).then( (String result){
//處理代碼
});
- 用于登入邏輯到進入app使用者頁面的邏輯
注意,在push頁面時,安卓機自帶的傳回鍵使可以直接傳回push前的一個頁面,這樣容易産生登入後又點選傳回鍵登出的情況,為解決這種影響使用者使用的問題,考慮使用下面給出的push方法
Navigator.pushReplacementNamed(context, '/homePage');
使用Navigator.pushReplacementNamed()可以直接替換目前頁面為push進入的頁面,而不是在頁面棧裡繼續疊加,進而避免了登出的情況發生,而是直接退出App。
- 使用一個頁面替換目前的頁面棧
在頁面棧過于深入,而你需要抛棄所有的頁面棧内容,并使用另一個頁面進行替換時,該需求大多出現在登出時,避免出現明明已經登出,但點選傳回鍵還可以重新進入登陸狀态。
Navigator.pushNamedAndRemoveUntil(context, '/loginPage',
ModalRoute.withName("/loginPage"));