广告位联系
返回顶部
分享到

Flutter Widgets之标签类控件Chip介绍

IOS 来源:互联网 作者:佚名 发布时间:2022-10-23 20:57:19 人浏览
摘要

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

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

RawChip

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

  • Chip
  • InputChip
  • ChoiceChip
  • FilterChip
  • ActionChip

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

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

1

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

效果:

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

1

2

3

4

5

RawChip(

           avatar: CircleAvatar(child: Text('R'),),

           label: Text('RawChip'),

           isEnabled: false,//禁止点选状态

         ),

设置label的样式和内边距:

1

2

3

4

5

6

7

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),

         ),

设置删除相关属性:

1

2

3

4

5

6

7

8

9

10

11

12

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),

        ),

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

1

2

3

4

5

6

7

8

RawChip(

           label: Text('RawChip'),

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

           backgroundColor: Colors.blue,

           padding: EdgeInsets.symmetric(vertical: 10),

           elevation: 8,

           shadowColor: Colors.grey,

         )

materialTapTargetSize是配置组件点击区域大小的属性,很多组件都有此属性,比如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

[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:子组件的实际大小。

设置选中状态、颜色:

1

2

3

4

5

6

7

8

9

10

11

RawChip(

             label: Text('RawChip'),

              selected: _selected,

           onSelected: (v){

               setState(() {

                 _selected =v;

               });

           },

           selectedColor: Colors.blue,

           selectedShadowColor: Colors.red,

         )

Chip

Chip是一个简单的标签控件,仅显示信息和删除相关属性,是一个简化版的RawChip,用法和RawChip一样。源代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

@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一样。源代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

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,

  );

}

基本用法:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

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),

   ),

ChoiceChip

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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

         )

FilterChip

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

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

     ],

   );

 }

运行效果:

总结:

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

  • RawChip:是Material风格标签控件,此控件是其他标签控件的基类,通常情况下,不会直接创建此控件,而是使用其他的标签控件。
  • InputChip:以紧凑的形式表示一条复杂的信息,例如实体(人,地方或事物)或对话文本。InputChip 本质上也是RawChip,用法和RawChip一样
  • ChoiceChip:允许从一组选项中进行单个选择,创建一个类似于单选按钮的标签,本质上ChoiceChip也是一个RawChip,ChoiceChip本身不具备单选属性。
  • FilterChip:可以作为过滤标签,本质上也是一个RawChip
  • ActionChip:显示与主要内容有关的一组动作,本质上也是一个RawChip
  • Chip:一个简单的标签控件,仅显示信息和删除相关属性,是一个简化版的RawChip,用法和RawChip一样

版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。

您可能感兴趣的文章 :

原文链接 : https://juejin.cn/post/7155685641341108231
相关文章
  • iOS开发删除storyboard步骤介绍

    iOS开发删除storyboard步骤介绍
    删除iOS项目中的storyboard 删除项目中的storyboard, (变成一个纯代码的iOS UIKit项目), 需要几步? 找到storyboard, 删掉它. 直接用ViewController. 删除st
  • Flutter Widgets之标签类控件Chip介绍

    Flutter Widgets之标签类控件Chip介绍
    Flutter 标签类控件大全ChipFlutter内置了多个标签类控件,但本质上它们都是同一个控件,只不过是属性参数不同而已,在学习的过程中可以将
  • iOS Lotusoot模块化工具应用的动态思路
    下文,写的是 Swift 依赖 OC 库,没有命名空间 组件化的要点-约定 个人觉得 例如,URL 路由的注册,就是把约定的信息,传过去。作为服务。
  • iOS浮点类型精度问题的原因与解决办法
    前言 相信不少人(其实我觉得应该是每个人)都遇到过一个问题,那就是当服务端返回的JSON数据中出现了小数时,客户端用CGFloat去解析时
  • iOS开发实现计算器功能的代码

    iOS开发实现计算器功能的代码
    效果图 Masonry 使用数组来自动约束 NSArray *buttonArrayOne = @[_buttonAC, _buttonLeftBracket, _buttonRightBracket, _buttonDivide]; //withFixedSpacing: 每个view中间的间
  • iOS自定义雷达扫描扩散动画的代码

    iOS自定义雷达扫描扩散动画的代码
    自己自定义了 一个雷达扫描/扩散效果的View。 扫描View 效果如下: 扩散View 效果如下: 自定义的代码如下: 1. RadarView.h #import UIKit/UIKit.h t
  • iOS实现雷达扫描效果

    iOS实现雷达扫描效果
    具体内容如下 #import UIKit/UIKit.h @interface LTIndicatiorView : UIView@property(nonatomic,strong)UIColor *color;@property(nonatomic,assign)float repeatCount;@property(nonatom
  • IOS NSTimeInterval使用案例介绍
    一 ios 获取时间间隔 想在程序开始或者进入某个界面 ,到结束程序或退出某个界面,获取到这个持续时间. 获取到这个时间还需要转化一个
  • IOS WebRTC的实现原理

    IOS WebRTC的实现原理
    它在2011年5月开放了工程的源代码,在行业内得到了广泛的支持和应用,成为下一代视频通话的标准。 WebRTC的音视频通信是基于P2P,那么什
  • 关于ios配置微信config出现验签失败的问题解决
    在开发中,出现了一个关于微信配置的问题。 使用的开发工具以及开发框架为 uniapp , JSSDK为 jweixin 使用uniapp进行公众号开发,需要在进入
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计