Flutter 标签类控件大全Chip

Flutter 标签类控件大全Chip

老孟导读:Flutter内置了多个标签类控件,但本质上它们都是同一个控件,只不过是属性参数不同而已,在学习的过程中可以将其放在放在一起学习,方便记忆。

RawChip

Material风格标签控件,此控件是其他标签控件的基类,通常情况下,不会直接创建此控件,而是使用如下控件:

Chip

InputChip

ChoiceChip

FilterChip

ActionChip

如果你想自定义标签类控件时通常使用此控件。

RawChip可以通过设置onSelected被选中,设置onDeleted被删除,也可以通过设置onPressed而像一个按钮,它有一个label属性,有一个前置(avatar)和后置图标(deleteIcon)。

基本用法如下:

RawChip(

label: Text('老孟'),

)

效果如下:

禁用状态设置:

RawChip(

label: Text('老孟'),

isEnabled: false,

)

效果如下:

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

RawChip(

avatar: CircleAvatar(

child: Text('孟'),

),

label: Text('老孟'),

)

效果如下:

设置label的样式和内边距:

RawChip(

label: Text('老孟'),

labelStyle: TextStyle(color: Colors.blue),

labelPadding: EdgeInsets.symmetric(horizontal: 10),

)

效果如下:

设置删除相关属性:

RawChip(

label: Text('老孟'),

onDeleted: (){

print('onDeleted');

},

deleteIcon: Icon(Icons.delete),

deleteIconColor: Colors.red,

deleteButtonTooltipMessage: '删除',

)

效果如下:

点击删除图标,回调onDeleted。

设置形状、背景颜色及内边距:

RawChip(

label: Text('老孟'),

shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),

backgroundColor: Colors.blue,

padding: EdgeInsets.symmetric(vertical: 10),

)

效果如下:

设置阴影:

RawChip(

label: Text('老孟'),

elevation: 8,

shadowColor: Colors.blue,

)

效果如下:

materialTapTargetSize属性控制最小点击区域,详情查看:MaterialTapTargetSize

设置选中状态、颜色:

bool _selected = false;

RawChip(

label: Text('老孟'),

selected: _selected,

onSelected: (v){

setState(() {

_selected = v;

});

},

selectedColor: Colors.blue,

selectedShadowColor: Colors.red,

)

效果如下:

设置选中状态下“前置对勾”图标:

RawChip(

label: Text('老孟'),

selected: true,

showCheckmark: true,

checkmarkColor: Colors.red,

)

效果如下:

showCheckmark为false时,无“前置对勾”图标。

设置点击属性:

RawChip(

label: Text('老孟'),

onPressed: (){

print('onPressed');

},

pressElevation: 12,

)

效果如下:

点击时有水波纹效果。

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,

);

}

ChoiceChip

允许从一组选项中进行单个选择,创建一个类似于单选按钮的标签,本质上ChoiceChip也是一个RawChip,ChoiceChip本身不具备单选属性。

单选demo如下:

int _selectIndex = 0;

Wrap(

spacing: 15,

children: List.generate(10, (index) {

return ChoiceChip(

label: Text('老孟 $index'),

selected: _selectIndex == index,

onSelected: (v) {

setState(() {

_selectIndex = index;

});

},

);

}).toList(),

)

效果如下:

本控件由共建者普通程序员提供。

FilterChip

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

List _filters = [];

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(',')}'),

],

)

效果如下:

ActionChip

显示与主要内容有关的一组动作,本质上也是一个RawChip,用法如下:

ActionChip(

avatar: CircleAvatar(

backgroundColor: Colors.grey.shade800,

child: Text('孟'),

),

label: Text('老孟'),

onPressed: () {

print("onPressed");

})

效果如下:

效果很像按钮类控件。

交流

老孟Flutter博客地址(近200个控件用法):http://laomengit.com

欢迎加入Flutter交流群(微信:laomengit)、关注公众号【老孟Flutter】:

你可能也喜欢

国内30家HTC Vive线下体验点名单
方正飞腾怎么发排
3658商城

方正飞腾怎么发排

10-22 8601
厉害!中学生发现微信“抢最大红包”秘诀,轻松抢到手气最佳