Flutter筆記(一):BottomNavigationBar常見(jiàn)問(wèn)題

App中最常見(jiàn)的底部導(dǎo)航片酝,直接看看代碼

BottomNavigationBar({
    Key key,
    @required this.items,  //必須有的item
    this.onTap,  //點(diǎn)擊事件
    this.currentIndex = 0,  //當(dāng)前選中
    this.elevation = 8.0,  //高度
    BottomNavigationBarType type,  //排列方式
    Color fixedColor,    //'Either selectedItemColor or fixedColor can be specified, but not both'
    this.backgroundColor,  //背景
    this.iconSize = 24.0,  //icon大小
    Color selectedItemColor,  //選中顏色
    this.unselectedItemColor,  //未選中顏色
    this.selectedIconTheme = const IconThemeData(),
    this.unselectedIconTheme = const IconThemeData(),
    this.selectedFontSize = 14.0,  //選中文字大小
    this.unselectedFontSize = 12.0,  //未選中文字大小
    this.selectedLabelStyle,  
    this.unselectedLabelStyle,
    this.showSelectedLabels = true, //是否顯示選中的Item的文字
    bool showUnselectedLabels,  //是否顯示未選中的Item的問(wèn)題
  })

常見(jiàn)問(wèn)題

1、設(shè)置BottomNavigationBar超過(guò)3個(gè)后挖腰,不顯示顏色

只有兩個(gè)的時(shí)候能正常顯示雕沿,這個(gè)時(shí)候并未設(shè)置顏色相關(guān)屬性,但是顯示的是primaryColor

new BottomNavigationBar(
        items: [
          BottomNavigationBarItem(
              icon: new Icon(IconFont.iconhome), title: new Text("首頁(yè)")),
          BottomNavigationBarItem(
              icon: new Icon(IconFont.iconcategory), title: new Text("分類")),
//          BottomNavigationBarItem(
//              icon: new Icon(IconFont.iconpic), title: new Text("妹子")),
//          BottomNavigationBarItem(
//              icon: new Icon(IconFont.iconaccount), title: new Text("我的"))
        ],
//        selectedItemColor: Color(0xffff8635),
//        unselectedItemColor: Color(0xff666666),
//        type: BottomNavigationBarType.fixed,
//        showUnselectedLabels: true,
      ),
1.jpg

大于三個(gè)之后無(wú)法正常顯示(變成了白色)


2.jpg

查看源碼其實(shí)發(fā)現(xiàn)猴仑,BottomNavigationBarType type, 默認(rèn)情況下审轮,item小于三個(gè) type = fixed,大于三個(gè)type = shifting;

  static BottomNavigationBarType _type(
      BottomNavigationBarType type,
      List<BottomNavigationBarItem> items,
  ) {
    if (type != null) {
      return type;
    }
    return items.length <= 3 ? BottomNavigationBarType.fixed : BottomNavigationBarType.shifting;
  }

然后默認(rèn)的選中和未選中的顏色是根據(jù)type變化的辽俗,源碼如下

switch (widget.type) {
      case BottomNavigationBarType.fixed:  //默認(rèn)fixed模式下使用主題色
        colorTween = ColorTween(
          begin: widget.unselectedItemColor ?? themeData.textTheme.caption.color,
          end: widget.selectedItemColor ?? widget.fixedColor ?? themeColor,
        );
        break;
      case BottomNavigationBarType.shifting:  //默認(rèn)shifting模式下使用白色疾渣,白色?這其實(shí)就是看不見(jiàn)的原因
        colorTween = ColorTween(
          begin: widget.unselectedItemColor ?? Colors.white,
          end: widget.selectedItemColor ?? Colors.white,
        );
        break;
    }

那么這里就有解決方法了崖飘,如果只是要他顯示出來(lái)只需要改變模式 或者 設(shè)置默認(rèn)顏色

//設(shè)置默認(rèn)顏色
selectedItemColor: Color(0xffff8635),
unselectedItemColor: Color(0xff666666),
//BottomNavigationBarType改為fixed模式
type: BottomNavigationBarType.fixed,
5.jpg

這樣子其實(shí)Item都能顯示出來(lái)了榴捡。然后我們稍微分析一下fixed和shifting模式的區(qū)別,其實(shí)很簡(jiǎn)單就是朱浴,fixed模式是平分吊圾,而shifting模式是可以搖擺的达椰。但是可以看到設(shè)置了默認(rèn)顏色后,未選中的文字不顯示项乒,于是就有了第二個(gè)問(wèn)題

2啰劲、item大于三個(gè)的時(shí)候文字不顯示。

或者說(shuō)我假設(shè)希望用shifting模式檀何,怎么把文字顯示出來(lái)蝇裤。
由上一個(gè)問(wèn)題我們得知肯定是BottomNavigationBarType引起的,我們查看源碼控制是否顯示文字是由以下代碼控制埃碱,如果沒(méi)有傳值則由_defaultShowUnselected返回

showUnselectedLabels = showUnselectedLabels ?? _defaultShowUnselected(_type(type, items)),

_defaultShowUnselected中就得出了猖辫,shifting模式下默認(rèn)不顯示,fixed模式下默認(rèn)顯示砚殿。(其實(shí)這個(gè)本想吐槽的啃憎,但是仔細(xì)想想MD風(fēng)格中好像就是默認(rèn)不顯示的,顯然這里的shifting模式更符合MD風(fēng)格似炎,但是現(xiàn)在大家似乎更適合fixed模式)

static bool _defaultShowUnselected(BottomNavigationBarType type) {
    switch (type) {
      case BottomNavigationBarType.shifting:
        return false;
      case BottomNavigationBarType.fixed:
        return true;
    }
    assert(false);
    return false;
  }

現(xiàn)在問(wèn)題就好解決了辛萍,那我給他默認(rèn)值就好了,這樣就能正常顯示出文字了羡藐。

new BottomNavigationBar(
//省略...
       showUnselectedLabels: true,
 ),
6.jpg

總結(jié)

其實(shí)BottomNavigationBar就一個(gè)問(wèn)題贩毕,就是由于item數(shù)量引起的默認(rèn)BottomNavigationBarType不同導(dǎo)致的問(wèn)題。以上就大概講解了幾個(gè)重要的不同之處仆嗦。其他屬性如果有問(wèn)題的依次看下源碼就能輕松解決辉阶。
最后來(lái)個(gè)屬性齊全的代碼和樣式。(其實(shí)就是把開頭的代碼注釋去掉)

    new BottomNavigationBar(
      items: [
          BottomNavigationBarItem(
              icon: new Icon(IconFont.iconhome), title: new Text("首頁(yè)")),
          BottomNavigationBarItem(
              icon: new Icon(IconFont.iconcategory), title: new Text("分類")),
          BottomNavigationBarItem(
              icon: new Icon(IconFont.iconpic), title: new Text("妹子")),
          BottomNavigationBarItem(
              icon: new Icon(IconFont.iconaccount), title: new Text("我的"))
        ],
        selectedItemColor: Color(0xffff8635),
        unselectedItemColor: Color(0xff666666),
        type: BottomNavigationBarType.fixed,
        showUnselectedLabels: true,
    )
7.jpg

完整代碼

https://github.com/leiyun1993/FlutterDemo-GankIO

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘩扼,一起剝皮案震驚了整個(gè)濱河市谆甜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌集绰,老刑警劉巖规辱,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異栽燕,居然都是意外死亡罕袋,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門碍岔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)浴讯,“玉大人,你說(shuō)我怎么就攤上這事蔼啦±颊洌” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵询吴,是天一觀的道長(zhǎng)掠河。 經(jīng)常有香客問(wèn)我亮元,道長(zhǎng),這世上最難降的妖魔是什么唠摹? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任爆捞,我火速辦了婚禮,結(jié)果婚禮上勾拉,老公的妹妹穿的比我還像新娘煮甥。我一直安慰自己,他們只是感情好藕赞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布成肘。 她就那樣靜靜地躺著,像睡著了一般斧蜕。 火紅的嫁衣襯著肌膚如雪双霍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天批销,我揣著相機(jī)與錄音洒闸,去河邊找鬼。 笑死均芽,一個(gè)胖子當(dāng)著我的面吹牛丘逸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掀宋,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼深纲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了劲妙?” 一聲冷哼從身側(cè)響起囤萤,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎是趴,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澄惊,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唆途,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掸驱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肛搬。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖毕贼,靈堂內(nèi)的尸體忽然破棺而出温赔,到底是詐尸還是另有隱情,我是刑警寧澤鬼癣,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布陶贼,位于F島的核電站啤贩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拜秧。R本人自食惡果不足惜痹屹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枉氮。 院中可真熱鬧志衍,春花似錦、人聲如沸聊替。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惹悄。三九已至春叫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俘侠,已是汗流浹背象缀。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爷速,地道東北人央星。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像惫东,于是被迫代替她去往敵國(guó)和親莉给。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容