天天看點

flutter頁面間跳轉和傳參-Navigator的使用

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:"請輸入昵稱");
}))
           

這種方式就可以傳遞參數了。

  1. 傳回上一頁并攜帶參數

使用Navigator的pop傳回可傳回上一級,并攜帶一個參數

Navigator.pop(context,"攜帶參數");
           
  1. 接收路由傳回的參數

注意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){

       //處理代碼

  });
           
  1. 用于登入邏輯到進入app使用者頁面的邏輯

注意,在push頁面時,安卓機自帶的傳回鍵使可以直接傳回push前的一個頁面,這樣容易産生登入後又點選傳回鍵登出的情況,為解決這種影響使用者使用的問題,考慮使用下面給出的push方法

Navigator.pushReplacementNamed(context, '/homePage');
           

使用Navigator.pushReplacementNamed()可以直接替換目前頁面為push進入的頁面,而不是在頁面棧裡繼續疊加,進而避免了登出的情況發生,而是直接退出App。

  1. 使用一個頁面替換目前的頁面棧

在頁面棧過于深入,而你需要抛棄所有的頁面棧内容,并使用另一個頁面進行替換時,該需求大多出現在登出時,避免出現明明已經登出,但點選傳回鍵還可以重新進入登陸狀态。

Navigator.pushNamedAndRemoveUntil(context, '/loginPage',
                            ModalRoute.withName("/loginPage"));