1写烤、Flutter Navigator(頁(yè)面導(dǎo)航) & bottomNavigationBar(底部導(dǎo)航)

回顧Flutter自研項(xiàng)目中的兩個(gè)知識(shí)點(diǎn):Navigator跟bottomNavigationBar挽荡。
首先,Navigator理解為頁(yè)面導(dǎo)航误续,主要運(yùn)用push跟pop兩個(gè)方法吨悍。push將元素添加到堆棧的頂部,pop從同一堆棧中刪除頂部元素蹋嵌。

push方法具體使用方式育瓜,(push就不介紹了)如下:

pushNamed:

這種路由需要一開(kāi)始現(xiàn)在創(chuàng)建App的時(shí)候定義

newMaterialApp(
        ....
        routes: {
            "nameRoute":(BuildContext context)=>newSecondPage(),
        },
);

然后就可以在程序中使用Navigator.pushNamed來(lái)跳轉(zhuǎn)
Navigator.pushNamed(context, "nameRoute");
這種路由的缺點(diǎn)是不能傳遞參數(shù)。

pushReplacement 和 pushReplacementNamed:

二者都是用來(lái)替代當(dāng)前棧中棧頂元素. 只是接口的調(diào)用方式不同栽烂。

pushAndRemoveUntil 和 pushNamedAndRemoveUntil:

typedef RoutePredicate = bool Function(Route<dynamic> route);
//第一個(gè)參數(shù)context是上下文的context躏仇,
//第二個(gè)參數(shù)newRouteName是新的路由所命名的路徑
//第三個(gè)參數(shù)predicate,返回值是bool類型腺办,按照我的理解焰手,就是用來(lái)判斷Until所結(jié)
//束的時(shí)機(jī),如果為false的話怀喉,就會(huì)一直繼續(xù)執(zhí)行Remove的操作书妻,直到為true的時(shí)候,停止Remove操作躬拢,然后才執(zhí)行push操作躲履。
  static Future<T> pushNamedAndRemoveUntil<T extends Object>(BuildContext context, String newRouteName, RoutePredicate predicate) {
    return Navigator.of(context).pushNamedAndRemoveUntil<T>(newRouteName, predicate);
  }

如果想在彈出新路由之前,刪除路由棧中的所有路由聊闯,那可以使用下面的這種寫法工猜,(Route route) => false,這樣能保證把之前所有的路由都進(jìn)行刪除菱蔬,然后才push新的路由域慷。
Navigator.of(context).pushNamedAndRemoveUntil('/LoginScreen', (Route<dynamic> route) => false);
如果想在彈出新路由之前,刪除路由棧中的部分路由。利用ModalRoute.withName(name)犹褒,來(lái)執(zhí)行判斷,可以看下面的源碼弛针,當(dāng)所傳的name跟堆棧中的路由所定義的時(shí)候叠骑,會(huì)返回true值,不匹配的話削茁,則返回false宙枷。

Navigator.of(context).pushNamedAndRemoveUntil('/screen4',ModalRoute.withName('/screen1'));
 
 //ModalRoute.withName的源碼
   static RoutePredicate withName(String name) {
    return (Route<dynamic> route) {
      return !route.willHandlePopInternally
          && route is ModalRoute
          && route.settings.name == name;
    };
  }

bool pop(BuildContext context, [ result ]):
將棧頂路由出棧,result為頁(yè)面關(guān)閉時(shí)返回給上一個(gè)頁(yè)面的數(shù)據(jù)茧跋。

popUntil()

popUntil()方法的過(guò)程其實(shí)跟上面差不多慰丛,就是是少了push一個(gè)新頁(yè)面的操作,只是單純的進(jìn)行移除路由操作瘾杭。

popUntil(RoutePredicate predicate);
Navigator.of(context).popUntil(ModalRoute.withName("/XXX"));

bottomNavigationBar(底部導(dǎo)航)

底部導(dǎo)航一般在首頁(yè)生命使用诅病,簡(jiǎn)要描述一下使用流程:
入口:狀態(tài)可變的組件:HomePage build方法中創(chuàng)建腳手架Scaffold,設(shè)置Scaffold的bottomNavigationBar粥烁。
bottomNavigationBar的組成:

@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _bulidBody(),//底部tab按鍵對(duì)應(yīng)page
      bottomNavigationBar: _buildButtomNavBar(),//創(chuàng)建底部導(dǎo)航
    );
  }
Widget _buildButtomNavBar(){
    BottomNavigationBar(
        type: BottomNavigationBarType.fixed,
        items: [
          BottomNavigationBarItem(...),
          BottomNavigationBarItem(...),
          BottomNavigationBarItem(...),
          BottomNavigationBarItem(...),
        ],
        onTap: _onSelectTab,
    )
}

onTap按鍵切換時(shí)調(diào)用該方法贤笆,API使用方式(int index){......},_onSelectTab中調(diào)用setState方法來(lái)刷新當(dāng)前UI讨阻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芥永,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钝吮,更是在濱河造成了極大的恐慌埋涧,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奇瘦,死亡現(xiàn)場(chǎng)離奇詭異棘催,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)链患,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門巧鸭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人麻捻,你說(shuō)我怎么就攤上這事纲仍。” “怎么了贸毕?”我有些...
    開(kāi)封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵郑叠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我明棍,道長(zhǎng)乡革,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮沸版,結(jié)果婚禮上嘁傀,老公的妹妹穿的比我還像新娘。我一直安慰自己视粮,他們只是感情好细办,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蕾殴,像睡著了一般笑撞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钓觉,一...
    開(kāi)封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天茴肥,我揣著相機(jī)與錄音,去河邊找鬼荡灾。 笑死瓤狐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的卧晓。 我是一名探鬼主播芬首,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逼裆!你這毒婦竟也來(lái)了郁稍?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胜宇,失蹤者是張志新(化名)和其女友劉穎耀怜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體桐愉,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡财破,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了从诲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片左痢。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖系洛,靈堂內(nèi)的尸體忽然破棺而出俊性,到底是詐尸還是另有隱情,我是刑警寧澤描扯,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布定页,位于F島的核電站,受9級(jí)特大地震影響绽诚,放射性物質(zhì)發(fā)生泄漏典徊。R本人自食惡果不足惜杭煎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卒落。 院中可真熱鬧羡铲,春花似錦、人聲如沸导绷。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)妥曲。三九已至,卻和暖如春钦购,著一層夾襖步出監(jiān)牢的瞬間檐盟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工押桃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葵萎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓唱凯,卻偏偏與公主長(zhǎng)得像羡忘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子磕昼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356