Flutter - 常用组件
一切皆组件。Flutter所有的元素都是由组件组成。比如一个布局元素、一个动画、一个装饰效果等。
Container(容器组件)
Container
包含一个子widget
,自身具备alignment
、padding
等属性,方便布局过程中摆放child
常用属性
属性名 | 类型 | 说明 |
---|---|---|
key | key | Container唯一标识符,用于查找更新 |
alignment | AlignmentGeometry | 控制child的对齐方式,如果Container或者Container的父节点尺寸大于child的尺寸,该属性设置会起作用,有很多种对齐方式 |
padding | EdgeInsetsGeometry | Decoration内部的空白区,如果有child,child位于padding内部 |
color | Color | 用来设置Container背景色,如果foregroudDecoration设置的话,可能会覆盖color效果 |
decoration | Decoration | 绘制在child后面的修饰,设置了Decoration的话,就不能设置color属性,否则会报错,此时应该在Decoration中进行颜色的设置 |
foregroundDecoration | Decoration | 绘制在child前面的装饰 |
width | double | Container的宽度,设置为double.infinity可以强制在宽度上撑满,不设置,则根据child和父节点两者一起布局 |
height | double | Container的高度,设置为double.infinity可以强制在高度上撑满 |
constraints | BoxConstraints | 添加到child上额外的约束条件 |
margin | EdgeInsetsGeometry | 围绕在Decoration和child之外的空白区域,不属于内容区域 |
transform | Matrix4 | 设置Container的变换矩阵,类型为Matrix4 |
child | Widget | Container中的内容Widget |
padding与margin的不同之处:padding是包含在Content内,而margin是外部边界。设置点击事件的话,padding区域会响应,而margin区域不会响应。
Text(文本)
文本组件Text负责显示文本和定义显示样式。
常用属性
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
data | String | 数据为要显示的文本 | |
maxLines | int | 0 | 文本显示的最大行数 |
style | TextStyle | null | 文本样式,可定义文本的字体大小、颜色、粗细等 |
textAlign | TextAlign | TextAlign.center | 文本水平方向对齐方式,取值右center、end、justify、left、right、start、values |
textDirection | TextDirection | TextDirection.ltr | 有些文本书写方向从左到右,如英语、中文,有些则是从右到左,比如乌尔都语。从左到右使用TextDirection.ltr从右到左使用TextDirection.rtl |
textScaleFactor | double | 1.0 | 字体缩放系数,比如设置为1.5,那么字体会放大1.5倍 |
textSpan | TextSpan | null | 文本块,TextSpan里可以包含文本内容及样式 |
RichText(富文本)
富文本组件RichText使用多个不同风格的widget显示文本,要显示的文本使用TextSpan对象树来描述,每个对象都有一个用于该子树的关联样式。文本可能多行,也可能显示在同一行,取决于布局约束。
常用属性
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
text | TextSpan | - | 要显示的的文本 |
textAlign | TextAlign | TextAlign.start | 文本水平方向对齐方式,取值右center、end、justify、left、right、start、values |
textDirection | TextDirection | TextDirection.ltr | 有些文本书写方向从左到右,如英语、中文,有些则是从右到左,比如乌尔都语。从左到右使用TextDirection.ltr从右到左使用TextDirection.rtl |
softWrap | bool | true | 是否自动换行 |
overflow | TextOverflow | TextOverflow.clip | 内容超出文本范围处理方式,默认截断处理 |
textScaleFactor | double | 1.0 | 文本缩放比例,默认100%比例显示 |
maxLines | int | - | 最大显示行数 |
Image(图片组件)
详细介绍
图片组件Image显示图像的组件,有多种构造函数:
new Image
:从ImageProvider获取图像new Image.asset
:加载资源图片new Image.file
:加载本地图片文件new Image.network
:加载网络图片new Image.memory
:加载Uint8List资源图片
常用属性
属性名 | 类型 | 说明 |
---|---|---|
image | ImageProvider | 抽象类,需要自己实现获取图片数据的操作 |
width/height | double | Image显示区域的宽度和高度设置,这里需要把Image和图片两个区分开。图片本身有大小,Image Widget是图片的容器,本身也有大小。宽度和高度的配置经常和fit属性搭配 |
fit | BoxFit | 图片填充模式,具体取值见 BoxFit取值表 |
color | Color | 图片颜色 |
colorBlendMode | BlendMode | 在对图片进行手动处理的时候,可能用到图层混合,如改变图片颜色,此属性可以对颜色进行混合处理,有多种模式 |
alignment | Alignment | 控制图片的摆放位置,比如图片放置在右下角则为Alignment.bottomRight |
repeat | ImageRepeat | 此属性可以设置图片的重复模式。moRepeat为不重复,Repeat为x和y方向重复,repeatX为x方向重复,repeatY为y方向重复 |
centerSlice | Rect | 当图片需要被拉伸显示时,centerSlice定义的矩形区域会被拉伸,可以理解为我们在图片内部定义9个点用作拉伸,9个点为”上”,”下”,”左”,”右”,”上中”,”下中”,”左中”,”右中”,”正中” |
matchTextDirection | bool | matchTextDirection与Derection配合使用。TextDirectio有两个值分别为:TextDirection.ltr从左到右展示图片,TextDirection.rtl为从右到左展示图片 |
gaplessPlayback | bool | 当ImageProvider发生变化后,重新加载图片的过程中,原图片的展示是否保留。值为true则保留,值为false则不保留,直接等待下一张图片加载 |
BoxFit取值及描述
值 | 描述 |
---|---|
BoxFit.fill | 全图显示,显示可能拉伸,充满 |
BoxFit.contain | 全图显示,显示原比例,不需充满 |
BoxFit.cover | 显示可能拉伸,可能裁剪,充满 |
BoxFit.fitWidth | 显示可能拉伸,可能裁剪,宽度充满 |
BoxFit.fitHeight | 显示可能拉伸,可能裁剪,高度充满 |
BoxFit.none | 原始大小 |
BoxFit.scaleDown | 效果和BoxFit.contain差不多,但是该属性不允许显示超过原图大小(可小不可大) |
Icon(图标)
Flutter中,可以像web开发一样使用iconfont,iconfont即字体图标
,它是将图标做成字体文件,然后通过指定不同的字符而显示不同的图片。
在Flutter开发中,iconfont和图片相比有如下优势:
- 体积小:可以减小安装包大小。
- 矢量的:iconfont 都是矢量图标,放大不会影响其清晰度。
- 可以应用文本样式:可以像文本一样改变字体图标的颜色、大小对齐等。
- 可以通过 TextSpan 和文本混用。
常用属性
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
icon | IconData | null | 展示的具体图标,可使用Icons图标列表中的任意一个图标即可,如Icons.phone表示一个电话的图标 |
color | Color | null | 图标的颜色 |
style | TextStyle | null | 文本样式,可定义文本的字体大小、颜色、粗细等 |
size | Double | 24.0 | 图标的大小,注意需要带上小数位 |
textDirection | TextDirection | TextDirection.ltr | Icon组件里也可以添加文本内容。有些文本书写的方向是从左到右,有些则是从右到左。从左到右使用TextDirection.ltr从右到左使用TextDirection.rtl |
按钮
IconButton(图标按钮)
图标按钮组件IconButton是基于Meterial Design
风格的组件,可以响应按下的事件,并且按下时带水波纹效果。如果它的onPressed
回调函数为null
,那么这个按钮处于禁用状态,并且不可按下。
常用属性
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
alignment | AlignmentGeometry | Alignment.center | 定义IconButton的Icon对齐方式,默认为居中。Alignment可以设置x,y的偏移量 |
icon | Widget | null | 展示的具体图标,可以使用Icons图标列表中任意一个图标即可,如Icons.phone表示一个电话图标 |
color | Color | null | 图标组件的颜色 |
disabledColor | Color | ThemeData.disabledColor | 图标组件禁用状态的颜色,默认为主题里的禁用颜色,也可以设置为其他颜色 |
iconSize | double | 24.0 | 图标的大小,注意需要带上小数点 |
onPressed | VoidCallback | null | 当按钮按下时会触发此回调事件 |
tooltip | String | “” | 当按钮长按下时的提示语句 |
RaisedButton(凸起按钮)
RaisedButton是Material Design
中的button,一个凸起的材质矩形按钮,它可以响应按下事件,并且按下时会带一个触摸效果。
FlatButton(扁平化的按钮)
OutlineButton(外边框的按钮)
常用属性
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
color | Color | null | 组件的颜色 |
disabledColor | Color | ThemeData.disabledColor | 组件禁用状态的颜色,默认为主题里的禁用颜色,也可以设置为其他颜色 |
onPressed | VoidCallback | null | 当按钮按下时会触发此回调事件 |
child | Widget | - | 按钮的child通常为一个Text文本组件,用来显示按钮的文本 |
enable | bool | true | 按钮是否为禁用状态 |