用于图片显示的Widget,常用类别:
- Image.asset 资源图片
- Image.network 网络图片
- Image.file 本地文件图片
- Image.memory 内存图片
向项目内添加图片
- 添加资源图片目录:
在android ios lib同目录建立一个images文件夹,将图片都放到该文件夹下
- 配置图片信息
在pubspec.yaml中,将每个图片信息添加到文件中
注意 assets 和下面- images/xxx.jpg 的缩进,要严格按照上图所示,否则易出错。
- Packages get下
修改完pubspec.yaml的assets后都需要重新获取下
点击Packages get 或命令行运行也可以。
- 重新运行项目即可
Image.network 显示网络图片
1 | Image.network("http://xxxxx.jpg",width: 50,height: 50,) |
Image.asset 显示项目中的图片
1 | Image.asset(String name, { |
- 图片显示
1 | //图片保持比例,按原图大小显示,如果宽高任何一个超出了屏幕宽高,则将超出屏幕的那个宽高设定为屏幕宽高,如果都超出了,那么图片将尽可能大的在屏幕范围内按照原比例显示,也就是图片显示的宽为屏幕宽(高按比例)或高为屏幕高(宽按比例)。 |
- width 设置图片控件宽度
- height 设置图片控件高度
1 | //指定图片显示范围 width 和height |
1 | Image.asset("images/img03.jpg",width: 200,height: 300,), |
1 | Image.asset("images/img03.jpg",width: 600,height: 200,), |
- Image的width 和height受容器大小限制,如果超出了容器大小,按容器大小计算
1 | Container( |
alignment 属性 在容器内的显示位置,默认Alignment.center 中间,取值包括:
Alignment.topLeft 顶部靠左
Alignment.topCenter 顶部中间
Alignment.topRight 顶部靠右
Alignment.centerLeft 中间靠左
Alignment.center 中间
Alignment.centerRight 中间靠右
Alignment.bottomLeft 底部靠左
Alignment.bottomCenter 底部中间
Alignment.bottomRight 底部靠右
Alignment.lerp(Alignment.topLeft, Alignment.topRight, t) 线性取值,t在0-1之间,t越小越倾向于左侧的值,t越大越倾向于右边的值
1 | Container( |
1 | Container( |
1 | Container( |
1 | Container( |
1 | Container( |
1 | Container( |
1 | Container( |
1 | Container( |
1 | Container( |
1 | Container( |
- Alignment.lerp(Alignment a, Alignment b, t)
1 | Container( |
1 | Container( |
fit属性,图片在控件范围内的显示方式
BoxFit.none,如果图片尺寸小于控件范围,则居中显示,否则以控件大小截取原图中间位置范围的图片显示,
BoxFit.contain 大图缩小 小图放大,保持比例,使图片的宽或高与控件宽或高一致
BoxFit.cover 保持原图比例,大图缩小,小图放大,直至把整个控件填满,图片的宽或高至少有一个与图片的宽或高一致,另一边裁剪
BoxFit.fill 不考虑原图比例,图片的宽放大或缩小到控件宽,并且图片高放大或缩小到控件高,填充满控件
BoxFit.fitHeight 图片高放大或缩小至控件高,宽等比放大或缩小
BoxFit.fitWidth 图片宽放大或缩小至控件高,高等比放大或缩小
BoxFit.scaleDown 如果图片尺寸大于控件范围,就缩放图片直至能显示完全图片,也就是宽或高中的一个与控件宽高一致。图片尺寸小于控件,则不处理,居中显示
说明:图片img03尺寸大于控件范围,图片img03_small尺寸小于控件范围
1 | //不设置fit 小图居中显示 |
1 | //不设置fit 大图尽可能大的在控件内按原比例显示 |
1 | //小图宽度放大至控件宽 |
1 | //小图放大,直至填充满控件,至少宽或高中的一个与控件的宽高一致,另一个变裁剪 |
1 | //小图放大 宽放大至控件宽 高放大至控件高 不考虑原图比例 |
1 | Divider(height: 10,color: Colors.grey,), |
1 | //小图不变,居中显示 |
repeat 如果图片没有完全覆盖完控件范围,那么剩余空白范围,图片怎么处理。
ImageRepeat.noRepeat 不处理
ImageRepeat.repeat xy轴重复显示
ImageRepeat.repeatX x轴重复显示 y轴不变
ImageRepeat.repeatY y轴重复显示 x轴不变
1 | Container( |
1 | Container( |
1 | Container( |
centerSlice
Rect.fromLTRB(70, 70, 140, 140) 确定四个角的大小,这四个角不拉伸,其余位置拉伸,直至填满控件
1 | Container( |
scale
1 | Divider(height: 10,color: Colors.grey,), |