Flutter路由導(dǎo)航

路由導(dǎo)航用來管理所有頁面的跳轉(zhuǎn),需要在入口函數(shù)中定義跳轉(zhuǎn)名稱對應(yīng)的目標(biāo)頁面,方法如下:

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return MaterialApp(
     home: _MyHomePage(),
     routes: {
     '/login': (BuildContext context) => LoginPage(),
     '/user': (BuildContext context) => UserPage(),
     },
   );
 }
}

一、push打開新頁面

pushNamed

Navigator.of(context).pushNamed('/login');
  • 說明:每次打開新的頁面都會(huì)在棧頂重新創(chuàng)建,并且舊頁面不會(huì)關(guān)閉

pushReplacementNamed

Navigator.of(context).pushReplacementNamed('/login');
  • 說明:把當(dāng)前頁棧中的位置替換成目標(biāo)頁面

pushReplacement

Navigator.of(context).pushReplacement(context,new LoginPage());
  • 說明:和pushReplacementNamed方法類似,不同點(diǎn)在于此方法可以直接new要跳轉(zhuǎn)的頁面,而pushReplacementNamed方法需要在routes中定義要跳轉(zhuǎn)的目標(biāo)頁面名稱

popAndPushNamed

Navigator.popAndPushNamed(context, '/login');

-說明:關(guān)閉當(dāng)前頁,打開目標(biāo)頁面

pushNamedAndRemoveUntil

1、Navigator.of(context).pushNamedAndRemoveUntil('/login', (Route<dynamic> route) => false);
2、Navigator.of(context).pushNamedAndRemoveUntil('/login', ModalRoute.withName('/'));
  • 說明:
  • 方法1:關(guān)閉所有頁面,打開新頁面。 (Route<dynamic> route) => false是否要關(guān)閉完所有頁面再打開目標(biāo)頁面
  • 方法2:/默認(rèn)是主頁,關(guān)閉除主頁之外的其他頁面,再打開目標(biāo)頁面

pushAndRemoveUntil

Navigator.pushAndRemoveUntil(context,MaterialPageRoute(builder: (BuildContext context) => LoginPage()),(Route<dynamic> route) => false,);
  • 說明:和pushNamedAndRemoveUntil方法類似,該方法不需要在入口routes中定義路由映射,直接通過new打開

popUntil

Navigator.popUntil(context, ModalRoute.withName('/login'));
  • 說明:有些應(yīng)用場景下,用戶可能不得不填寫一個(gè)由三部分組成的長表單,該表單可能在移動(dòng)應(yīng)用程序的三個(gè)連續(xù)屏幕中顯示?,F(xiàn)在在表單的第三個(gè)頁面,用戶決定取消填寫表單。用戶單擊Cancel,就會(huì)彈出所有之前的與表單相關(guān)的屏幕,并將用戶帶回主屏幕,從而丟失所有與表單相關(guān)的數(shù)據(jù)(在這種情況下,這是我們想要的)。我們不會(huì)在這里推出任何新東西,只是回到以前的路線。。

二、pop

maybePop

Navigator.of(context).maybePop();

-說明:會(huì)自動(dòng)進(jìn)行判斷,如果當(dāng)前頁面pop后,會(huì)顯示其他頁面,不會(huì)出現(xiàn)問題,則將執(zhí)行當(dāng)前頁面的pop操作 否則將不執(zhí)行

canPop

bool canPop=Navigator.of(context).canPop();

-說明:判斷當(dāng)前頁面能否進(jìn)行pop操作,并返回bool值

pop

Navigator.of(context).pop();

-說明:直接pop當(dāng)前頁面

傳遞參數(shù)

MaterialPageRoute傳參

String params;
 Navigator.push(context, new MaterialPageRoute(builder: (BuildContext context) => new mainPage(params)));
//接收參數(shù)
class mainPage extends StatelessWidget {
  final String userName;
  mainPage(this.userName);
  @override
  Widget build(BuildContext context) {
    print(userName);
}

帶返回值的頁面跳轉(zhuǎn)

String userName = "hhh";
Navigator.push(
    context,
    new MaterialPageRoute(
        builder: (BuildContext context) =>
        new LoginPage(userName))).then((data){
          result =data;
          print(result);
});
//在LoginPage頁面使用 Navigator.of(context).pop('params');
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容