在Flutter中實(shí)現(xiàn)五種風(fēng)格的Tab

flutter SDK提供的默認(rèn)標(biāo)簽樣式不太吸引人。 但這并不意味著您無法自定義標(biāo)簽的外觀。 在Flutter中自定義Tab指示器的樣式可以通過簡(jiǎn)單的代碼行完成脓斩,而無需實(shí)現(xiàn)我們自己的窗口小部件。

在本文中,我將向您展示如何為下一個(gè)Flutter項(xiàng)目添加5種不同的標(biāo)簽樣式变擒。

首先,您需要使用DefaultTabController類創(chuàng)建一個(gè)基本選項(xiàng)卡寝志。 將DefaultTabController分配給MaterialApp小部件的home屬性娇斑。 作為DefaultTabController的子級(jí),可以將Scaffold與 Appbar和主體一起使用材部。 將Appbar小部件分配到ScaffoldAppbar屬性毫缆,以使選項(xiàng)卡的標(biāo)題部分。 對(duì)于腳手架的body屬性败富,可以為TabBarView小部件分配3個(gè)子小部件悔醋,以在單擊時(shí)顯示Tab內(nèi)容項(xiàng)。

默認(rèn)樣式

檢查完整的代碼以獲取默認(rèn)Tab兽叮。

return DefaultTabController(
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          elevation: 0,
          bottom: TabBar(
            indicatorSize: TabBarIndicatorSize.label,
            tabs: [
              Tab(
                child: Align(
                  alignment: Alignment.center,
                  child: Text("APPS"),
                ),
              ),
              Tab(
                child: Align(
                  alignment: Alignment.center,
                  child: Text("MOVIES"),
                ),
              ),
              Tab(
                child: Align(
                  alignment: Alignment.center,
                  child: Text("GAMES"),
                ),
              ),
            ],
          ),
        ),
        body: TabBarView(
          children: [
            Icon(Icons.apps),
            Icon(Icons.movie),
            Icon(Icons.games),
          ],
        ),
      ),
    );

1. 圓角Tab風(fēng)格

作為第一種樣式芬骄,我們將向選項(xiàng)卡指示器添加圓角樣式猾愿。 首先,我將簡(jiǎn)要介紹我們將要修改的參數(shù)账阻。

1. unselectedLabelColor –不存在指示符的標(biāo)簽顏色蒂秘。 基本上,尚未選擇的指標(biāo)淘太。
2. indicatorSize –選定的指標(biāo)大小姻僧。 我們可以添加兩個(gè)值以使指標(biāo)為標(biāo)簽寬度或標(biāo)簽寬度。
3. Indicator –這是我們要為指標(biāo)分配自定義樣式的地方

Tab–這將包含Tab標(biāo)題的列表蒲牧。 在這里撇贺,我們可以為每個(gè)Tab標(biāo)題添加額外的樣式。
可以通過添加帶有borderRadius 50BoxDecoration來實(shí)現(xiàn)圓角樣式冰抢。在這里松嘶,我們向每個(gè)Tab```標(biāo)題添加紅色邊框。 當(dāng)有人選擇Tab``時(shí)挎扰,它將用紅色填充翠订。 如果您對(duì)邊框不感興趣,可以刪除邊框并保持簡(jiǎn)單遵倦。

圓角樣式
return DefaultTabController(
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          backgroundColor:Colors.white,
          elevation: 0,
          bottom: TabBar(
            unselectedLabelColor:Colors.redAccent,
            indicatorSize: TabBarIndicatorSize.label,
            indicator:BoxDecoration(
              color:Colors.redAccent,
              borderRadius:BorderRadius.circular(50),
            ),
            tabs: [
              Tab(
                child:Container(
                  decoration:BoxDecoration(
                    borderRadius:BorderRadius.circular(50),
                    border:Border.all(color:Colors.redAccent,
                      width:1,
                    ),
                  ),
                  child:Align(
                    alignment:Alignment.center,
                    child:Text("APPS"),
                  ),
                ),
              ),
              Tab(
                child:Container(
                  decoration:BoxDecoration(
                    borderRadius:BorderRadius.circular(50),
                    border:Border.all(color:Colors.redAccent,
                      width:1,
                    ),
                  ),
                  child:Align(
                    alignment:Alignment.center,
                    child:Text("MOVIES"),
                  ),
                ),
              ),
              Tab(
                child:Container(
                  decoration:BoxDecoration(
                    borderRadius:BorderRadius.circular(50),
                    border:Border.all(color:Colors.redAccent,
                      width:1,
                    ),
                  ),
                  child:Align(
                    alignment:Alignment.center,
                    child:Text("GASMES"),
                  ),
                ),
              ),
            ],
          ),
        ),
        body: TabBarView(
          children: [
            Icon(Icons.apps),
            Icon(Icons.movie),
            Icon(Icons.games),
          ],
        ),
      ),
    );

2. 圓角帶有漸變色Tab風(fēng)格

我們將刪除以前方法中添加到每個(gè)Tab的樣式尽超。 刪除后,向BoxDecoration添加漸變梧躺。 您可以使用帶有兩種顏色的LinearGradient小部件來獲得漸變效果似谁。 您可以根據(jù)自己的喜好更改漸變。

效果圖
return DefaultTabController(
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          backgroundColor:Colors.white,
          elevation: 0,
          bottom: TabBar(
            unselectedLabelColor:Colors.redAccent,
            indicatorSize: TabBarIndicatorSize.tab,
            indicator:BoxDecoration(
              gradient:LinearGradient(
                colors:[
                  Colors.redAccent,
                  Colors.orangeAccent,
                ],
              ),
              color:Colors.redAccent,
              borderRadius:BorderRadius.circular(50),
            ),
            tabs: [
              Tab(
                child:Align(
                  alignment:Alignment.center,
                  child:Text("APPS"),
                ),
              ),
              Tab(
                child:Align(
                  alignment:Alignment.center,
                  child:Text("MOVIES"),
                ),
              ),
              Tab(
                child:Align(
                  alignment:Alignment.center,
                  child:Text("GASMES"),
                ),
              ),
            ],
          ),
        ),
        body: TabBarView(
          children: [
            Icon(Icons.apps),
            Icon(Icons.movie),
            Icon(Icons.games),
          ],
        ),
      ),
    );

3. 矩形Tab風(fēng)格

矩形樣式可以通過更改上一個(gè)中的小代碼來完成燥狰。 可以通過為leftToprightTop都添加10來更改boxDecorationBorderRadius棘脐。 然后,我將appbar backgroundColor更改為紅色龙致,以使其看起來更好蛀缝。

效果圖
return DefaultTabController(
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          backgroundColor:Colors.redAccent,
          elevation: 0,
          bottom: TabBar(
            labelColor:Colors.redAccent,
            unselectedLabelColor:Colors.white,
            indicatorSize: TabBarIndicatorSize.label,
            indicator:BoxDecoration(
              color:Colors.white,
              borderRadius:BorderRadius.only(
                topLeft:Radius.circular(10),
                topRight:Radius.circular(10),
              ),
            ),
            tabs: [
              Tab(
                child:Align(
                  alignment:Alignment.center,
                  child:Text("APPS"),
                ),
              ),
              Tab(
                child:Align(
                  alignment:Alignment.center,
                  child:Text("MOVIES"),
                ),
              ),
              Tab(
                child:Align(
                  alignment:Alignment.center,
                  child:Text("GASMES"),
                ),
              ),
            ],
          ),
        ),
        body: TabBarView(
          children: [
            Icon(Icons.apps),
            Icon(Icons.movie),
            Icon(Icons.games),
          ],
        ),
      ),
    );

4.菱形Tab樣式

您可以通過為ShapeDecoration小部件的shape參數(shù)添加帶有BeveledRectangleBorderShapeDecoration來獲得Diamond選項(xiàng)卡樣式。 BeveledRectangleBorder將允許您添加展平角而不是圓角目代。

在這里屈梁,我們使用borderRadius作為10使其看起來像這樣。

效果圖
    return DefaultTabController(
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          backgroundColor:Colors.white,
          elevation: 0,
          bottom: TabBar(
            unselectedLabelColor:Colors.redAccent,
            indicatorPadding:EdgeInsets.only(left:30,right:30),
            indicator:ShapeDecoration(
              color:Colors.redAccent,
              shape:BeveledRectangleBorder(
                side:BorderSide(
                  color:Colors.redAccent,
                ),
                borderRadius:BorderRadius.circular(10),
              ),
            ),
            tabs: [
              Tab(
                child:Align(
                  alignment:Alignment.center,
                  child:Text("APPS"),
                ),
              ),
              Tab(
                child:Align(
                  alignment:Alignment.center,
                  child:Text("MOVIES"),
                ),
              ),
              Tab(
                child:Align(
                  alignment:Alignment.center,
                  child:Text("GASMES"),
                ),
              ),
            ],
          ),
        ),
        body: TabBarView(
          children: [
            Icon(Icons.apps),
            Icon(Icons.movie),
            Icon(Icons.games),
          ],
        ),
      ),
    );

5.菱形Tab樣式(2)

同樣榛了,通過更改BeveledRectangleBorderborderRadius在讶,可以實(shí)現(xiàn)不同的形狀。 您可以將borderRadius更改為20霜大,以獲得其他形狀构哺。 您可以通過更改borderRadius值嘗試不同的樣式。

效果圖
    return DefaultTabController(
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          backgroundColor:Colors.white,
          elevation: 0,
          bottom: TabBar(
            unselectedLabelColor:Colors.redAccent,
            indicatorPadding:EdgeInsets.only(left:30,right:30),
            indicator:ShapeDecoration(
              color:Colors.redAccent,
              shape:BeveledRectangleBorder(
                side:BorderSide(
                  color:Colors.redAccent,
                ),
                borderRadius:BorderRadius.circular(20),
              ),
            ),
            tabs: [
              Tab(
                child:Align(
                  alignment:Alignment.center,
                  child:Text("APPS"),
                ),
              ),
              Tab(
                child:Align(
                  alignment:Alignment.center,
                  child:Text("MOVIES"),
                ),
              ),
              Tab(
                child:Align(
                  alignment:Alignment.center,
                  child:Text("GASMES"),
                ),
              ),
            ],
          ),
        ),
        body: TabBarView(
          children: [
            Icon(Icons.apps),
            Icon(Icons.movie),
            Icon(Icons.games),
          ],
        ),
      ),
    );

我希望您能通過幾行代碼更好地了解如何更改選項(xiàng)卡樣式。 如果您想觀看此視頻曙强,請(qǐng)觀看以下視頻残拐。
https://www.youtube.com/watch?v=Vnd0yvCkdNA&feature=youtu.be

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市碟嘴,隨后出現(xiàn)的幾起案子溪食,更是在濱河造成了極大的恐慌,老刑警劉巖娜扇,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件错沃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡雀瓢,警方通過查閱死者的電腦和手機(jī)枢析,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來致燥,“玉大人登疗,你說我怎么就攤上這事排截∠釉椋” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵断傲,是天一觀的道長(zhǎng)脱吱。 經(jīng)常有香客問我,道長(zhǎng)认罩,這世上最難降的妖魔是什么箱蝠? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮垦垂,結(jié)果婚禮上宦搬,老公的妹妹穿的比我還像新娘。我一直安慰自己劫拗,他們只是感情好间校,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著页慷,像睡著了一般憔足。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酒繁,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天滓彰,我揣著相機(jī)與錄音,去河邊找鬼州袒。 笑死揭绑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的郎哭。 我是一名探鬼主播他匪,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼弓叛,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了诚纸?” 一聲冷哼從身側(cè)響起撰筷,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎畦徘,沒想到半個(gè)月后毕籽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡井辆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年关筒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杯缺。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蒸播,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萍肆,到底是詐尸還是另有隱情袍榆,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布塘揣,位于F島的核電站包雀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏亲铡。R本人自食惡果不足惜才写,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奖蔓。 院中可真熱鬧赞草,春花似錦、人聲如沸吆鹤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)檀头。三九已至轰异,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間暑始,已是汗流浹背搭独。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留廊镜,地道東北人牙肝。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親配椭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虫溜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354