Flutter入門(38):Flutter 組件之 Chip抢蚀、ActionChip、ChoiceChip镰禾、FilterChip 詳解

1. 基本介紹

Chip皿曲、ActionChip唱逢、ChoiceChip、FilterChip 是一個常見的標簽控件屋休,會內(nèi)斂布局坞古,并且有一些常用的點擊功能。

2. 示例代碼

代碼下載地址劫樟。如果對你有幫助的話記得給個關(guān)注痪枫,代碼會根據(jù)我的 Flutter 專題不斷更新。

3. 屬性介紹

Chip 屬性 介紹
avatar 左側(cè)圖標組件
label @required 文本 Widget
labelStyle 文本樣式叠艳,TextStyle
labelPadding 文本外邊距 Padding
deleteIcon 右側(cè)刪除按鈕 Widget
onDeleted 刪除按鈕點擊事件
deleteIconColor 刪除按鈕顏色
deleteButtonTooltipMessage 長按刪除按鈕的提示語
shape 形狀奶陈,ShapeBorder
clipBehavior 裁剪方式,默認為 Clip.none
focusNode 焦點控制附较,Flutter 組件之 FocusNode 詳解
autofocus 自動聚焦吃粒,默認為 false
backgroundColor 背景色
padding 內(nèi)邊距 Padding
visualDensity 緊湊程度,VisualDensity
materialTapTargetSize 內(nèi)邊距拒课,默認最小點擊區(qū)域為 48 * 48徐勃,MaterialTapTargetSize.shrinkWrap 為組件實際大小
elevation 陰影高度,默認為 0
shadowColor 陰影顏色
CircleAvatar 屬性 介紹
child 子控件 Widget
backgroundColor 背景色
backgroundImage 背景圖
onBackgroundImageError 背景圖加載失敗回調(diào)
foregroundColor text 顏色
radius 半徑 (和 maxRadius 以及 minRadius 不能同時存在)
minRadius 最小半徑 (和 radius 不能同時存在)
maxRadius 最大半徑 (和 radius 不能同時存在)

4. Chip 詳解

import 'package:flutter/material.dart';

class FMChipVC extends StatefulWidget {
  @override
  FMChipState createState() => FMChipState();
}

class FMChipState extends State <FMChipVC>{
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(title: Text("Chip"),),
      body: _listView(),
    );
  }

  ListView _listView(){
    return ListView(
      children: [
        _chipForSimpleText(),
        _chipForSimple(),
        _chipForNormal(),
        _chip(),
      ],
    );
  }

  CircleAvatar _circleAvatar(){
    return CircleAvatar(
      child: Container(
        height: 30,
        color: Colors.red,
        alignment: Alignment.center,
        child: Text("Avatar child text"),
      ), // avatar 子控件
      backgroundColor: Colors.red, // avatar 背景色
      foregroundColor: Colors.white, // avatar 中 text 顏色
      // avatra 背景圖
      backgroundImage: NetworkImage("http://tiebapic.baidu.com/forum/w%3D580/sign=a96ca741eafaaf5184e381b7bc5594ed/7ea6a61ea8d3fd1f2643ad5d274e251f95ca5f38.jpg"),
      // 背景圖加載失敗回調(diào)
      onBackgroundImageError: (error, trace){
        print("onBackgroundImageError");
      },
      // radius: 200, // avatar 半徑 (和 maxRadius 以及 minRadius 不能同時存在)
      maxRadius: 100, // avatar 最小半徑 (和 radius 不能同時存在)
      minRadius: 80, // avatar 最大半徑 (和 radius 不能同時存在)
    );
  }

  Chip _chipForSimpleText(){
    return Chip(
        label: Text("Simple Text Chip")
    );
  }

  Chip _chipForSimple(){
    return Chip(
      label: Text("Simple Chip"),
      avatar: CircleAvatar(backgroundColor: Colors.red,),
    );
  }

  Chip _chipForNormal(){
    return Chip(
      label: Text("Normal Chip"),
      avatar: CircleAvatar(backgroundColor: Colors.red,),
      deleteIcon: Icon(Icons.ac_unit),
      onDeleted: (){},
    );
  }
  
  Chip _chip(){
    return Chip(
      avatar: _circleAvatar(), // 左側(cè)圖標組件
      label: Text("text"), // 文本 Widget
      labelStyle: TextStyle(color: Colors.red, fontSize: 30), // 文本樣式早像,TextStyle
      labelPadding: EdgeInsets.fromLTRB(15, 50, 0, 50), // 文本外邊距 Padding

      deleteIcon: Icon(Icons.ac_unit), // 右側(cè)刪除按鈕 Widget
      deleteButtonTooltipMessage: "deleteButtonTooltipMessage", // 長按刪除按鈕的提示語
      deleteIconColor: Colors.red, // 刪除按鈕顏色
      // 刪除按鈕點擊事件
      onDeleted: (){
        print("onDeleted");
      },
      // Chip 形狀
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(10),
        side: BorderSide(
          width: 2,
          color: Colors.red,
        ),
      ),

      // padding: EdgeInsets.zero,
    );
  }
}
Chip.png

5. ActionChip 詳解

相比 Chip僻肖,ActionChip 增加了 onPressed 的點擊事件,同時 ActionChip 移除了 deleteIcon 等相關(guān)屬性卢鹦。

  ListView _listView(){
    return ListView(
      children: [
        _chipForSimpleText(),
        _chipForSimple(),
        _chipForNormal(),
        _chip(),
        Padding(padding: EdgeInsets.all(10)),
        _actionChip(),
      ],
    );
  }

  ActionChip _actionChip(){
    return ActionChip(
      avatar: _circleAvatar(),
      onPressed: (){
        print("ActionChip onPressed");
      },
      label: Text("ActionChip"), // 文本 Widget
      labelStyle: TextStyle(color: Colors.red, fontSize: 30), // 文本樣式臀脏,TextStyle
      labelPadding: EdgeInsets.fromLTRB(15, 50, 0, 50), // 文本外邊距 Padding

      // Chip 形狀
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(10),
        side: BorderSide(
          width: 2,
          color: Colors.red,
        ),
      ),
    );
  }
Action Chip.png

6. ChoiceChip 詳解

  ListView _listView(){
    return ListView(
      children: [
        _chipForSimpleText(),
        _chipForSimple(),
        _chipForNormal(),
        _chip(),
        Padding(padding: EdgeInsets.all(10)),
        _actionChip(),
        Padding(padding: EdgeInsets.all(10)),
        _choiceChip(),
      ],
    );
  }

  bool _choiceChipSelected = false;

  ChoiceChip _choiceChip(){
    return ChoiceChip(
      avatar: _circleAvatar(), // 左側(cè)圖標組件
      label: Text("ChoiceChip"), // 文本 Widget
      labelStyle: TextStyle(color: Colors.red, fontSize: 30), // 文本樣式,TextStyle
      labelPadding: EdgeInsets.fromLTRB(15, 50, 0, 50), // 文本外邊距 Padding

      selected: _choiceChipSelected, // 是否選中
      selectedColor: Colors.yellow, // 選中背景色
      // 選中點擊事件
      onSelected: (value){
        print("ChoiceChip onSelected");
        _choiceChipSelected = value;
        setState(() {

        });
      },

      // Chip 形狀
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(10),
        side: BorderSide(
          width: 2,
          color: Colors.red,
        ),
      ),
    );
  }
ChoiceChip.gif

7. FilterChip 詳解

  ListView _listView(){
    return ListView(
      children: [
        _chipForSimpleText(),
        _chipForSimple(),
        _chipForNormal(),
        _chip(),
        Padding(padding: EdgeInsets.all(10)),
        _actionChip(),
        Padding(padding: EdgeInsets.all(10)),
        _choiceChip(),
        Padding(padding: EdgeInsets.all(10)),
        _filterChip(),
      ],
    );
  }

  bool _filterChipSeleted = false;

  FilterChip _filterChip(){
    return FilterChip(
      avatar: _circleAvatar(), // 左側(cè)圖標組件
      label: Text("text"), // 文本 Widget
      labelStyle: TextStyle(color: Colors.red, fontSize: 30), // 文本樣式法挨,TextStyle
      labelPadding: EdgeInsets.fromLTRB(15, 50, 0, 50), // 文本外邊距 Padding

      selected: _filterChipSeleted, // 是否選中
      selectedColor: Colors.white, // 選中背景色
      // 點擊回調(diào)
      onSelected: (value){
        _filterChipSeleted = value;
        setState(() {

        });
      },

      showCheckmark: true, // 是否顯示勾選框
      checkmarkColor: Colors.yellow, // 勾選框顏色

      // Chip 形狀
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(10),
        side: BorderSide(
          width: 2,
          color: Colors.red,
        ),
      ),
    );
  }
FilterChip.gif

8. 技術(shù)小結(jié)

Chip 其實并不難谁榜,就是屬性較多,多加練習理解各個屬性對應(yīng)樣式即可凡纳。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市帝蒿,隨后出現(xiàn)的幾起案子荐糜,更是在濱河造成了極大的恐慌,老刑警劉巖葛超,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暴氏,死亡現(xiàn)場離奇詭異,居然都是意外死亡绣张,警方通過查閱死者的電腦和手機答渔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侥涵,“玉大人沼撕,你說我怎么就攤上這事宋雏。” “怎么了务豺?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵磨总,是天一觀的道長。 經(jīng)常有香客問我笼沥,道長蚪燕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任奔浅,我火速辦了婚禮馆纳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘汹桦。我一直安慰自己鲁驶,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布营勤。 她就那樣靜靜地躺著灵嫌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪葛作。 梳的紋絲不亂的頭發(fā)上寿羞,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音赂蠢,去河邊找鬼绪穆。 笑死,一個胖子當著我的面吹牛虱岂,可吹牛的內(nèi)容都是我干的玖院。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼第岖,長吁一口氣:“原來是場噩夢啊……” “哼难菌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蔑滓,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤郊酒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后键袱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體燎窘,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年蹄咖,在試婚紗的時候發(fā)現(xiàn)自己被綠了褐健。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡澜汤,死狀恐怖蚜迅,靈堂內(nèi)的尸體忽然破棺而出舵匾,到底是詐尸還是另有隱情,我是刑警寧澤慢叨,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布纽匙,位于F島的核電站,受9級特大地震影響拍谐,放射性物質(zhì)發(fā)生泄漏烛缔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一轩拨、第九天 我趴在偏房一處隱蔽的房頂上張望践瓷。 院中可真熱鬧,春花似錦亡蓉、人聲如沸晕翠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淋肾。三九已至,卻和暖如春爸邢,著一層夾襖步出監(jiān)牢的瞬間樊卓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工杠河, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留碌尔,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓券敌,卻偏偏與公主長得像唾戚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子待诅,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348