延续上一节的内容,上一节我们讲解了各种Dialog跟提示,其中包括轻量级跟非轻量级,我们了解到了像
SnackBar、Tooltip、Dialog
等各种具有提示交互作用的Widget,今天我们继续上一篇的内容,来一块了解一下各种用于进度显示的Widget跟checkBox
等选择作用的Widget。
今天我们来一块了解一下各种Index跟Chose控件,像CircularProgressIndicator
圆环进度条,LinearProgressIndicator
水平进度条,Slider
滑杆,还有Checkbox,Switch等,下面我们就一块来进入今天的分享。
1. CircularProgressIndicator
老规矩,先从构造方法入手
1 | const CircularProgressIndicator({ |
从上述CircularProgressIndicator
的方法签名中,我们首先可以得到的信息是,圆环进度条可以自定义指定背景颜色跟宽度,可以设置进度,我贴上几个简单的例子来直观体验一下。
1 | import 'package:flutter/material.dart'; |
效果图
2.LinearProgressIndicator
对比LinearProgressIndicator
的构造方法
1 | const LinearProgressIndicator({ |
我们发现LinearProgressIndicator
与CircularProgressIndicator
除了少了一个strokeWidth不支持设置进度条宽度之外,其他完全一致,所以我就不多做讲解了,直接看下效果吧。
效果图
样例代码
1 | import 'package:flutter/material.dart'; |
3.Slider
构造方法
1 | const Slider({ |
Slider
滑杆进度条,支持用户手动拖拽定位,如果不涉及到用户拖拽交互,我们可以把他认为就是一个静态的LinearProgressIndicator
,使用起来也比较简单。但是如果需用跟用户交互,涉及到用户的拖拽手势然后动态的改变Slider的值,就需要借助我们之前讲到的StatefullWidget
,通过setState
来完成用户交互的数据重新更新渲染到Slider上,我们来一起体验一下。
3.1 静态Slider
1 | import 'package:flutter/material.dart'; |
效果图
如上图,就仅仅只是一个指示作用,不支持用户手指拖拽滑动,下面我们来借助StatefullWidget来做一下简单交互。
3.2 动态Slider
我们来模拟一下用户拖拽Slider可以设置当前是星期几的效果。
效果图
这里提到一个小细节,有读者给我反馈说在使用Slider的时候,在Slider上方的label一直不显示
,这里是因为label在指定了divisions
也就是指定当前进度被离散成多少份之后才会显示,读者注意到这个细节即可。下面是上图的样例代码,供大家参考。
1 | import 'package:flutter/material.dart'; |
上面说完了常用的进度展示控件,我们通过上面的学习基本能处理业务上不同场景下如果选用进度Widget,下面我们来进入本篇的第二部分,关于Chose控件的介绍。
4.Checkbox
Checkbox
跟Slider一样,因为需要处理或者说需要记录用户的选择状态,然后去更新Checkbox
的选中状态,所以理所当然我们也需要使用StatefullWidget
来完成这一操作。否则Checkbox
只能跟上面分析Slider
一样,只能一个静态展示,不能完成或者说记录用户的行为操作。
Checkbox使用跟原生Android一样,没有什么需要特别注意的知识点,我就不多做讲解了,下面我们一起来看一个例子。
样例代码
1 | import 'package:flutter/material.dart'; |
5.Switch
Switch
跟Checkbox
用户上类似,都是为了记录用户的选中状态,只不过是Switch
可定制的部分比Checkbox
更多一些,开发者可以加入更多的个性化定制,我们还是先从构造方法说起。
1 | const Switch({ |
下面我把几个配置不同样式的Switch效果图贴上了,读者可根据代码自行分析其具体实现细节,我就不逐一讲解构造方法中各个属性的作用了。
效果图
这里说明一下,上图为什么点击其中一个
Switch
另外两个也会跟着联动,原因是我在写测试代码的时候,为了减少代码的书写量,尽可能的让代码清晰,所以给三个Switch
在onChanged
的时候绑定的是同一个函数回调,没有分开单独处理每个Swtich
的回调事件,读者知道即可,不用过于纠结。
如上图:
第一个Switch我指定了,激活跟非激活状态的圆点颜色跟滑动轨迹的颜色
第二个Switch我指定了,激活跟非激活状态下圆点是资源图片。
第三个Swtich没有做任何处理。
上述效果图代码如下:
1 | import 'package:flutter/material.dart'; |
属性及外观
Switch和Checkbox属性比较简单,读者可以查看API文档,它们都有一个activeColor属性,用于设置激活态的颜色。至于大小,
到目前为止,Checkbox的大小是固定的,无法自定义,而Switch只能定义宽度,高度也是固定的。
值得一提的是Checkbox有一个属性tristate ,表示是否为三态,其默认值为false ,这时Checkbox有两种状态即“选中”和“不选中”,对应的value值为true和false ;如果其值为true时,value的值会增加一个状态null,读者可以自行了解。
6.Radio
在项目开发或者真实案例中Radio通常都是成组出现,比如性别选择、爱好选择等等场景中,Flutter充分考虑到了这一场景需求,给我们提供了便捷使用Radio的API。利用flutter的Radio能满足我们在原生Android中各个使用Radio的场景。下面我们来一起看下构造方法,顺便有一点小细节需要讲解一下。
1 | const Radio({ |
看下Radio中的这段代码
1 | /// The value represented by this radio button. |
从Radio的这段源码注释中我们可以看到Radio
在处理分组时,value
跟groupValue
是作为一个泛型参数,也就是说我们可以指定value的类型为int、或者String等类型,并且当value和groupValue一致的时候则选中
根据这些我们就可以自由发挥去处理我们实际开发中需要使用Radio
分组的业务逻辑了。下面我贴上一个选择性别
跟选择数字
的样例代码供大家参考,读者可结合上述关于Radio的源码
分析和下面的代码对比学习。
1 | import 'package:flutter/material.dart'; |
效果图