第二百一十回
2023-12-17 04:49:22
我们在上一章回中介绍了"如何实现Numberpicker"相关的内容,本章回中将介绍wheelChoose组件.闲话休提,让我们一起Talk Flutter吧。
我们在上一章回中介绍了WheelChoose组件相关的内容,本章回中将介绍如何创建以图片为背景的页面,闲话休提,让我们一起Talk Flutter吧。
1. 概念介绍
在实际项目中有些页面使用纯色做背景,有些页面使用图片做背景,使用纯色做背景时只需要修改容器的color或者background属性就可以,这里的容器可以是充当整个
页面的Scaffold或者局部页面的Container.使用图片做背景时就不能修改容器的属性了,因为容器没有提供存放图片的属性。那么怎么办呢?自定义一个容器?还是
使用其它的方法?本章回中将解决此问题。
2. 实现方法
2.1 整体思路
我们准备使用Stack这种布局,把图片放在它的最底层,然后把其它的页面组件叠加在图片上,这样就相当于把图片当作了其它页面组件的背景,进而实现了以图片为背景
的页面。这种思路是一种图层的思想,把不同的内容当作不同的图层,然后充分利用Stack叠加组件的原理,把多个图层叠加在一起。
2.2 具体步骤
介绍完整体的思路后,我们介绍具体的操作步骤,其中会包含很多的细节,大家要看仔细了哦!
- 使用Scaffold组件当作页面,它的body属性对应Stack组件;
- 在Stack组件中包含一个Image组件和一个SizedBox组件;
- 调整Image和SizedBox组件的宽度和高度,确保它们与屏幕的宽度和高度保持一致;
- 把Scaffold组件的extendBodyBehindAppBar设置为true,让body中的内容扩展到AppBar和StatusBar中;
- 把AppBar的forceMaterialTransparency属性修改true,让AppBar的背景变成透明色,这样才能看到body中扩展的内容;
- 把StatusBar设置成透明色,修改方法参考之前博客;这样才能看到body中扩展的内容;
上面的步骤中,其实只需要前三步就可以创建一个带图片背景的页面,最后三步的内容是为了让图片填充满整个屏幕,包含页面上方的AppBar以及手机屏幕最上方的
StatusBar.填充的原理就是先扩展body中的内容,然后把AppBar和StutasBar设置成透明色,这样就可以看到扩展的内容了。大家可以依据项目需求自行取舍。此外,
还有一些注意事项需要说明: - 给Stack组件添加children组件时,Image组件在所有组件的前面,这样才能保证它在Stack组件的最底层;
- 给Image组件的fit属性设置值,这样可以保证背景图片填充满整个页面;
- 给SizeBox组件设置一个顶部边距,不然它里面的内容会和StatusBar中的内容重叠;
3. 代码与效果
3.1 示例代码
WheelChooser(
///控制滑动方向
horizontal: true,
///使用装饰可以在选择的内容上方和下方显示一条横线
selectTextStyle:TextStyle(
///单独使用和复合使用装饰
// decoration: TextDecoration.overline,
decoration: TextDecoration.combine([TextDecoration.underline,TextDecoration.overline]),
) ,
///是否循环显示
isInfinite: true,
onValueChanged: (s) => debugPrint('$s selected'),
datas: [0,1,2,3,34,5,6,7,8,9],
),
///使用工厂方法,可以创建任意的选择器
SizedBox(
height: 150,
///可以添加任意的组件,这里添加的是icon
child: WheelChooser.custom(
onValueChanged: (value) {},
isInfinite: true,
children: const [
Icon(Icons.looks_3,size: 36,),
Icon(Icons.looks_two,size: 36,),
Icon(Icons.looks_one,size: 36,),
]),
),
///使用两种工厂方法实现数字选择器
SizedBox(
///通过控制容器的大小,可以控制显示被选择内容的范围
height: 100,
child: WheelChooser.integer(
///显示内容的大小,默认48
itemSize: 50,
horizontal: true,
isInfinite: true,
onValueChanged: (value) => debugPrint('$value'),
maxValue: 3,
minValue: 0,
),
),
SizedBox(
height: 100,
child: WheelChooser.number(
isInfinite: true,
onValueChanged: (value) => debugPrint('$value'),
maxValue: 3,
minValue: 0,
),
),
///可以选择任意对象当作被选择对象,因为value是泛型
SizedBox(
height: 200,
child: WheelChooser.choices(
isInfinite: true,
onChoiceChanged: (value) {},
choices:[
WheelChoice(value: 1, title: 'one'),
WheelChoice(value: 2, title: 'tow'),
WheelChoice(value: 3, title: 'three'),
]
),
),
3.2 运行效果
我们在上面的示例代码中演示了wheelChooser的基本用法,同时演示了其它工厂方法的使用方法,编译并且运行上面的程序,可以得到以下的运行效果图:
4. 内容总结
最后,我们对本章回的内容做一个全面的总结:(博客中有两个同名的文章,第一个是错误的,第二个是正确的)
- wheelChooser是三主包中提供的组件,它可以实现数字选择功能;
- wheelChooser扩展了选择范围,不只是数字,其它的组件也可以被选择;
- whellChooser提供了很多工厂方法,通过工厂方法可以快速创建相关的选择器;
看官们,与"wheelChooser组件"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!
文章来源:https://blog.csdn.net/talk_8/article/details/135039901
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!