我们在上一章回中介绍了"如何在任意位置显示PopupMenu"相关的内容,本章回中将介绍如何实现NumberPicker.闲话休提,让我们一起Talk Flutter吧。
我们在本章回中介绍的NumberPicker
主要用来实现数字选择功能,比如选择年月日,当然也可以使用YearPicker
实现,不过YearPicer是把年月日当作一个整体来选择,在界面上同时显示年月日三个选项,如果只想选择其中的某一个,而不显示其它选项,那么它就无能为力,因为该组件不支持这样去设置。
那么我们该如何实现这样的功能呢?答案是使用Numberpicker
组件,或者CupertinoPicker
组件。它们可以把年月日当作数字并且进行单独显示,本章回中将详细介绍这两个组件的使用方法。
和其它组件一样NumberPicker
组件提供了相关的属性来控制自己,接下来我们将介绍该组件中常用的属性,掌握这些属性后就可以使用该组件了。
除了NumberPicker
可以实现数字选择功能外,CupertinoPicker
组件也可以实现同样的功能,接下来我们介绍一下该组件的常用属性。
List
类型,主要用来存放被选择的内容;NumberPicker(
///这个是当前选择的值
value: _selectedValue,
itemCount: 3,
itemHeight: 60,
decoration: BoxDecoration(
border:Border.all(color: Colors.redAccent,width: 3,),
borderRadius: BorderRadius.circular(15),
),
///设置picker方向
axis: Axis.vertical,
///是否启用振动,默认不启用
// haptics: true,
///循环显示
infiniteLoop: true,
///设置值的范围
maxValue: 9,
minValue: 0,
step: 1,
///不修改数值的话,选择内容不在选择框架内
onChanged: (value){
setState(() {
_selectedValue = value;
});
},
),
child: CupertinoPicker(
///设置整个Picker的颜色
backgroundColor: Colors.purpleAccent,
itemExtent: 48,
///选择某个内容时回调此方法
onSelectedItemChanged: (int value) {
debugPrint('item $value is selected');
},
///最好设置为true,不然会发生选项重叠的现象
looping: true,
children: [
...List.generate(5, (index) => SizedBox(width:60,height:48,child: Text('item ${index+1}')),),
],
),
在上面的代码中,我们提供了NumberPicker
和CupertinoPicker
两个组件的示例代码,代码中添加了相关的注释,这样方便大家理解代码。
把上面的示例代码放到某个页面中后就可以运行了,下面是程序的运行效果图。图中上方紫色背景的选择器是CupertinoPicker组件,下面的灰色背景的选择器是NumberPicker组件。
最后,我们对实现数字选择功能的这两个组件做一个总结,主要包含它们的相同点和不同点:
看官们,与"如何实现Numberpicker"相关的内容就介绍到这里。此外,我还有一个疑问:NumberPicker
也算是比较实用的组件,而且Android中自带该组件,为什么Flutter官方不提供这样的组件呢?欢迎大家在评论区交流与讨论。