持续创作,加速生长!这是我参加「日新方案 10 月更文应战」的第21天,点击查看活动详情

概述:

Flutter 标签类控件大全ChipFlutter内置了多个标签类控件,但本质上它们都是同一个控件,只不过是特点参数不同罢了,在学习的过程中能够将其放在放在一同学习,便利记忆。

RawChip

Material风格标签控件,此控件是其他标签控件的基类,一般情况下,不会直接创立此控件,而是运用如下控件:

  • Chip
  • InputChip
  • ChoiceChip
  • FilterChip
  • ActionChip

假如你想自定义标签类控件,一般运用此控件。

RawChip能够经过设置onSelected被选中,设置onDeleted被删去,也能够经过设置onPressed而像一个按钮,它有一个label特点,有一个前置(avatar)和后置图标(deleteIcon)。

 RawChip(label: Text('RawChip')),

效果:

21、 Flutter Widgets 之 标签类控件大全Chip

设置左侧控件,一般是图标:

 RawChip(
            avatar: CircleAvatar(child: Text('R'),),
            label: Text('RawChip'),
            isEnabled: false,//制止点选状况
          ),

21、 Flutter Widgets 之 标签类控件大全Chip

设置label的样式和内边距:

 RawChip(
            avatar: CircleAvatar(child: Text('R'),),
            label: Text('RawChip'),
            // isEnabled: false,//制止点选状况
            labelPadding: EdgeInsets.symmetric(horizontal: 20),
            padding: EdgeInsets.only(left: 10,right: 10,top: 5),
          ),

21、 Flutter Widgets 之 标签类控件大全Chip

设置删去相关特点:

  RawChip(
            label: Text('RawChip'),
            onDeleted: (){
              print('onDeleted');
            },
            deleteIcon: Icon(Icons.delete),
            deleteIconColor: Colors.red,
            deleteButtonTooltipMessage: "删去",
            // isEnabled: false,//制止点选状况
            labelPadding: EdgeInsets.symmetric(horizontal: 10),
            padding: EdgeInsets.only(left: 10,right: 10,top: 5,bottom: 5),
          ),

21、 Flutter Widgets 之 标签类控件大全Chip

设置形状、布景色彩及内边距,阴影:

 RawChip(
            label: Text('RawChip'),
            shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
            backgroundColor: Colors.blue,
            padding: EdgeInsets.symmetric(vertical: 10),
            elevation: 8,
            shadowColor: Colors.grey,
          )

21、 Flutter Widgets 之 标签类控件大全Chip

materialTapTargetSize是配置组件点击区域巨细的特点,很多组件都有此特点,比方:

[FloatingActionButton], only the mini tap target size is increased.
* [MaterialButton]
* [OutlineButton]
* [FlatButton]
* [RaisedButton]
* [TimePicker]
* [SnackBar]
* [Chip]
* [RawChip]
* [InputChip]
* [ChoiceChip]
* [FilterChip]
* [ActionChip]
* [Radio]
* [Switch]
* [Checkbox]

MaterialTapTargetSize有2个值,分别为:

  • padded:最小点击区域为48*48。
  • shrinkWrap:子组件的实践巨细。

设置选中状况、色彩:

 RawChip(
              label: Text('RawChip'),
               selected: _selected,
            onSelected: (v){
                setState(() {
                  _selected =v;
                });
            },
            selectedColor: Colors.blue,
            selectedShadowColor: Colors.red,
          )

21、 Flutter Widgets 之 标签类控件大全Chip

Chip

Chip是一个简单的标签控件,仅显现信息和删去相关特点,是一个简化版的RawChip,用法和RawChip相同。源代码如下:

@override
Widget build(BuildContext context) {
  assert(debugCheckHasMaterial(context));
  return RawChip(
    avatar: avatar,
    label: label,
    labelStyle: labelStyle,
    labelPadding: labelPadding,
    deleteIcon: deleteIcon,
    onDeleted: onDeleted,
    deleteIconColor: deleteIconColor,
    deleteButtonTooltipMessage: deleteButtonTooltipMessage,
    tapEnabled: false,
    shape: shape,
    clipBehavior: clipBehavior,
    focusNode: focusNode,
    autofocus: autofocus,
    backgroundColor: backgroundColor,
    padding: padding,
    materialTapTargetSize: materialTapTargetSize,
    elevation: elevation,
    shadowColor: shadowColor,
    isEnabled: true,
  );
}

InputChip

以紧凑的方式表明一条杂乱的信息,例如实体(人,地方或事物)或对话文本。

InputChip 本质上也是RawChip,用法和RawChip相同。源代码如下:

override
Widget build(BuildContext context) {
  assert(debugCheckHasMaterial(context));
  return RawChip(
    avatar: avatar,
    label: label,
    labelStyle: labelStyle,
    labelPadding: labelPadding,
    deleteIcon: deleteIcon,
    onDeleted: onDeleted,
    deleteIconColor: deleteIconColor,
    deleteButtonTooltipMessage: deleteButtonTooltipMessage,
    onSelected: onSelected,
    onPressed: onPressed,
    pressElevation: pressElevation,
    selected: selected,
    tapEnabled: true,
    disabledColor: disabledColor,
    selectedColor: selectedColor,
    tooltip: tooltip,
    shape: shape,
    clipBehavior: clipBehavior,
    focusNode: focusNode,
    autofocus: autofocus,
    backgroundColor: backgroundColor,
    padding: padding,
    materialTapTargetSize: materialTapTargetSize,
    elevation: elevation,
    shadowColor: shadowColor,
    selectedShadowColor: selectedShadowColor,
    showCheckmark: showCheckmark,
    checkmarkColor: checkmarkColor,
    isEnabled: isEnabled && (onSelected != null || onDeleted != null || onPressed != null),
    avatarBorder: avatarBorder,
  );
}

基本用法:

 InputChip(
    avatar: CircleAvatar(
    radius: 12.0,
    ),
    label: Text(
    'InputChip',
    style: TextStyle(fontSize: 12.0),
    ),
    shadowColor: Colors.grey,
    deleteIcon: Icon(
    Icons.close,
    color: Colors.black54,
    size: 14.0,
    ),
    onDeleted: () {
      print('onDeleted');
    },
    onSelected: (bool selected) {
        setState(() {
          _selected = selected;
        });
    },
    selectedColor: Colors.orange,
    disabledColor: Colors.grey,
    selected: _selected,
    materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
    labelStyle: TextStyle(color: Colors.black54),
    ),

21、 Flutter Widgets 之 标签类控件大全Chip
21、 Flutter Widgets 之 标签类控件大全Chip

ChoiceChip

答应从一组选项中进行单个选择,创立一个类似于单选按钮的标签,本质上ChoiceChip也是一个RawChip,ChoiceChip自身不具备单选特点。

  int _selectedIndex = 0;
 Wrap(
            spacing: 5,
            children: List.generate(20, (index){
            return ChoiceChip(
                label: Text('测验 $index'),
                selected: _selectedIndex==index,
              onSelected: (v){
                  setState(() {
                    _selectedIndex =index;
                  });
              },
            );
          }).toList(),
          )

21、 Flutter Widgets 之 标签类控件大全Chip

FilterChip

FilterChip能够作为过滤标签,本质上也是一个RawChip,用法如下:

  List<String> _filters = [];
 _buildFilterChip(){
    return Column(
      children: [
        Wrap(
          spacing: 15,
          children: List.generate(10, (index) {
            return FilterChip(
              label: Text('测验 $index'),
              selected: _filters.contains('$index'),
              onSelected: (v) {
                setState(() {
                  if(v){
                    _filters.add('$index');
                  }else{
                    _filters.removeWhere((f){
                      return f == '$index';
                    });
                  }
                });
              },
            );
          }).toList(),
        ),
        Text('选中:${_filters.join(',')}'),
      ],
    );
  }

运转效果:

21、 Flutter Widgets 之 标签类控件大全Chip

总结:

本篇首要讲了以下几种chip组件的用法事例:

  • RawChip:是Material风格标签控件,此控件是其他标签控件的基类,一般情况下,不会直接创立此控件,而是运用其他的标签控件。

  • InputChip:以紧凑的方式表明一条杂乱的信息,例如实体(人,地方或事物)或对话文本。InputChip 本质上也是RawChip,用法和RawChip相同

  • ChoiceChip:答应从一组选项中进行单个选择,创立一个类似于单选按钮的标签,本质上ChoiceChip也是一个RawChip,ChoiceChip自身不具备单选特点。

  • FilterChip:能够作为过滤标签,本质上也是一个RawChip

  • ActionChip:显现与首要内容有关的一组动作,本质上也是一个RawChip

  • Chip:一个简单的标签控件,仅显现信息和删去相关特点,是一个简化版的RawChip,用法和RawChip相同