第二百零七回
2023-12-15 22:36:39
我们在上一章回中介绍了"如何自定义一个可选择的星期组件"相关的内容,本章回中将介绍"自定义TimpePicker".闲话休提,让我们一起Talk Flutter吧。
1. 概念介绍
我们在前面间章回中介绍过TimePicker,如果有看官忘记的话,可以点击这里查看。不过它的样式和内容都是固定的,无法修改,因此我们准备自定义一个TimePicker
组件,该组件只能选择小时和分钟,而且界面比较简洁,详细如下图所示。本章回中将介绍如何实现这种TimePicker组件。037
2. 思路与方法
2.1 整体思路
我们把效果图中的组件拆分成四个小组件:
- 一个蓝色背景用来显示当前被选择的日期,这个可以通过Containe组件实现;
- 两个滑轮分别用来选择小时和分钟,这个可以使用三方包组件实现;
- 一个文本用来显示小时和分钟之间的冒号,这个可以使用Text组件实现;
我们分别实现这四个组件后还需要把它们组合在一起,这样才是完整的TimePicker组件,因为它们之间有重叠部分,所以使用Stack布局组件把这四个组件组合在一起。
2.2 实现方法
- 创建Container组件,并且把它修改成圆角和蓝色背景;
- 创建两个滑轮,我们使用三方包WheelChooser来实现;
- 在两个滑轮之间添加一个Text组件,用来显示小时与分钟之间的冒号;
- 把显示小时和分别的滑轮与冒号通过Row组件组合成一行;
- 使用Stack组件把上面创建的四个组件组合在一起,组合时使用Positioned组件控制它们的位置;
3. 示例代码
Stack(
children: [
///深色方框用来显示当前被选择的数字
Positioned(
///这个值是listHeight的值除2后再做一些偏移
top: (screenHeight*2/3 - 128)/2 -26,
// top: 300,
///这个16是左右的边距
left: 16,
width: screenWidth-16*2,
height: 56,
child:Container(
decoration: BoxDecoration(
color: Colors.blue[500],
borderRadius: BorderRadius.circular(24),
),
),
),
///数字选择:使用两个滑轮实现
Positioned(
top: 0,
///这个值是屏幕宽度减去两个listWidth和sizeBox的宽度再除2
left: (screenWidth-80*2-32)/2,
child: Row(
children: [
Container(
alignment: Alignment.center,
child: WheelChooser(
listWidth: 80,
listHeight: screenHeight*2/3 - 128,
itemSize: 56,
startPosition: hour,
selectTextStyle: const TextStyle(color: Colors.white),
unSelectTextStyle: const TextStyle(color: Colors.black),
onValueChanged: (value){
hour = value;
},
datas: List<int>.generate(24, (index) => index),
),
),
const SizedBox(width: 32,
child: Text(" : ",style: TextStyle(fontSize: 24,color: Colors.white),),
),
WheelChooser(
listWidth: 80,
listHeight: screenHeight*2/3 - 128,
itemSize: 56,
startPosition: minute,
selectTextStyle: const TextStyle(color: Colors.white),
unSelectTextStyle: const TextStyle(color: Colors.black),
onValueChanged: (value){minute = value;},
datas: List<int>.generate(60, (index) => index),
),
],
),
),
],
),
上面的示例代码完全按照实现方法中的内容来编写,并且在关键位置添加了注释。代码中需要注意的是深色背景的位置,它需要与滑动被选择的内容对齐,不然显示的效果
不太好。此外,时间中小时的选择范围是0-24,分钟的选择范围是0-60.大家可以依据项目的需求来调整。
4. 内容总结
最后,我们对本章回的做一个全面的总结:
- 官方提供的TimePicker不够简洁,而且不能修改外观和内容,使用不方便;
- 自定义的TimePicker只包含小时和分钟选择功能;
- 自定义TimePicker时先把它折成小组件,然后再把小组件组合在一起使用;
看官们,与"自定义TimePicker组件"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!
文章来源:https://blog.csdn.net/talk_8/article/details/135025831
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!