Image是一个用于展示图片的组件。支持 JPEG、PNG、GIF、Animated GIF、WebP、Animated WebP、BMP 和 WBMP 等格式。
在网站设计、网站建设中从网站色彩、结构布局、栏目设置、关键词群组等细微处着手,突出企业的产品/服务/品牌,帮助企业锁定精准用户,提高在线咨询和转化,使成都网站营销成为有效果、有回报的无锡营销推广。创新互联建站专业成都网站建设10年了,客户满意度97.8%,欢迎成都创新互联客户联系。
Image.asset - 用于从资源目录的显示图片,需要在 pubspec.yaml 文件中声明。
Image.network - 用于从网络上显示图片。
Image.file - 用于从文件里显示图片。
Image.memory - 用于从内存里(Uint8List)显示图片。
alignment → AlignmentGeometry - 图像边界内对齐图像。
centerSlice → Rect - 九片图像的中心切片。
color → Color - 该颜色与每个图像像素混合colorBlendMode。
colorBlendMode → BlendMode - 用于 color 与此图像结合使用。
fit → BoxFit - 图像在布局中分配的空间。
gaplessPlayback → bool - 当图像提供者发生变化时,是继续显示旧图像(true)还是暂时不显示(false)。
image → ImageProvider - 要显示的图像。
matchTextDirection → bool - 是否在图像的方向上绘制图像 TextDirection。
repeat → ImageRepeat - 未充分容器时,是否重复图片。
height → double - 图像的高度。
width → double - 图像的宽度。
加载资源图片需要将图片资源放入工程中,例如:新建images文件夹,将图片放在该文件夹下,图片适配则是使用ios的方式1X,2X,3X:
然后在pubspec.yaml中配置assets:
加载资源/网络/本地文件图片/内存图片:
占位图加载图片:
圆形图片:1.裁剪实现 2.CircleAvatar实现 3.Container边框实现
圆角图片:1.裁剪实现 2.Container边框实现
BoxFit.contain 全图居中显示但不充满,显示原比例
BoxFit.cover 图片可能拉伸,也可能裁剪,但是充满容器
BoxFit.fill 全图显示且填充满,图片可能会拉伸
BoxFit.fitHeight 图片可能拉伸,可能裁剪,高度充满
BoxFit.fitWidth 图片可能拉伸,可能裁剪,宽度充满
BoxFit.scaleDown 效果和contain差不多, 但是只能缩小图片,不能放大图片
下一节学习基础组件之Text
NotificationListener 可以监听 PageView 的改变,比如滑动的距离,页面索引等,目前只使用的了索引。里面的一些方法挺有用的。
使用 AnimatedContainer 组件保证切换以后会有流程的过渡效果,表现的会平滑一些。
首先,返回数据需要包含图片的宽高信息,就像这样:
如果返回的只有图片信息没有宽高数据可以使用以下方法去获得图片的信息,这样也可以得到图片的宽高信息,不太建议,还是直接叫后端给,我们也方便处理,要是后端说他们给不了就拿上砖头去叫他们加,就想偷懒。
自适应轮播图的高度我们需要原始图片的宽高比,或者知道原始图的宽高。显示的时候按照原始的宽高比进行等比例缩放。
_controller.page 获取到的是一个浮点数,类似 1.0325441 ,使用 round 四舍五入出现的效果就是我们拖到一半或以上就可以得到下一个 activeIndex , activeIndex 是一个整数。
我们动态获取了图片的宽度以后放入 AnimatedContainer 就可以有过渡效果,真机和模拟器测试都很流畅,可以已60帧渲染。
Flutter中控件的高宽和字体大小时,使用的是逻辑像素,并非是实际的物理像素。
flutter中的屏幕适配
假设设计图的大小为1080 1920,上面一个图片的高度为 80 90,则它在设备上的高宽为
对于android手机,一般以宽度为基准计算UI的高宽,因为android手机的宽度一般就是750,1080等几个尺寸,但是高的尺寸就有很多。
推荐一个别人封装好的一个用于屏幕适配的库
Flutter屏幕适配方案插件-完美解决屏幕适配
在Flutter中,我们可以使用Image控件来显示图片,一般来讲我们的图片资源都来源于网络或者本地图片。
Flutter中的Image也是类似。
我们先来看看Image的构造方法
下面我们来看看其常用的属性
可以看到,其常用属性跟前端中的css很像。
下面我们来简单用一用Image控件
首先是必填参数image,它接收一个ImageProvider类型的值。ImageProvider是一个抽象类,他下面有下图这些实现类,由下面这些实现类可以看出,image是可以从资源,内存,网络,和文件中获取图片。
我们先来试试加载网络图片
首先看看NetworkImage构造方法,很简单,传个url就可以了
如下:
嗯,就是这么简单。其他3种情况使用也是类似的,自行看源码即可。
实际上,Flutter给我们提供了扩展方法,使用起来更加简单,通常我们直接使用提供的扩展方法即可
如下
可以看到,他们的构造方法基本类似。
所以我们也可以这样写,跟上面的效果是一致的。
大致分为一下几步
1.创建一个文件夹,用于存放图片,如图,我创建了一个imgs的文件夹,放了一张图片
2.在pubspec.yaml中声明资源,注意声明的时候路径和前面的-是有间隔的,不然的话会报#/properties/flutter/properties/assets: type: wanted [array] got -imgs/code.png
类似的错误,声明完成后点击右上方的packages get
或
下面我们再来看看其他属性。
width,height
宽高没什么好说的,就是设置宽度和高度
配合color使用,用于设置颜色的混合模式。BlendMode是一个枚举,他有很多值
详细解析还是看官方文档吧,值太多了,我们随便用用
用于设置图片的填充方式,当图片本身小于设置的宽高或者比父控件的宽高小时,我们可以设置该属性控制图片的显示。
其值的类型是BoxFit。是个枚举
具体含义还是直接看文档即可
设置图片的对齐方式,接收一个Alignment类型的值,值如下,很好理解
为了方便看效果我们在外边套了个Container,简单的把它理解为一个容器布局就可以了,类似于html中的div或android中的Layout,我们给Container设置了宽高和背景颜色。
bottomLeft效果如下,其他的自行尝试
相对于Image,ICON可以像web一样使用字体图标,并且可以使用矢量图,无需担心失真的问题,并且体积相对较小。
我们先来看看其构造方法
很简单,我们直接来用一用
默认情况下,pubspec.yaml中uses-material-design的值为true.我们默认就可以使用Material Design字体图标
showModalBottomSheet 所弹出的内容高度是固定的。要想自适应自己布局的高度只需如下两点:
加入 isScrollControlled: true 后,弹窗高度会变成全屏的。接下来就是自己布局中的处理。
BottomPhotoDialog是我自己写的想要弹出的布局。在根节点中用SingleChildScrollView来包裹Column即可让弹窗高度适应布局高度
按照给定尺寸进行图片的解码,而不是解码整个图片的尺寸,用来减少内存的占用。
官方文档:
官方说明:
Instructs Flutter to decode the image at the specified dimensions instead of at its native size.
This allows finer control of the size of the image in ImageCache and is generally used to reduce the memory footprint of ImageCache .
The decoded image may still be displayed at sizes other than the cached size provided here.
使用:
三方库: cached_network_image 限2.5.0之后版本才可用
设定最大的缓存宽度和高度 this.maxWidthDiskCache 、 this.maxHeightDiskCache
使用:
从相册选取图片,展示时使用指定尺寸宽高进行处理。
使用三方库:
使用自定义 provider 来指定所需图片的宽高:
AssetEntityImageProvider 传入宽高和图片原图 AssetEntity 数据。
provider 中 key.entity.thumbDataWithSize 方法:
进入 entity 中 thumbDataWithSize 方法:
进入 _getThumbDataWithId 方法中,
进入getThumb:
调用iOS原生的获取图片方法,
进入 getThumbWithId 方法,
原生实现获取置顶宽高缩略图方法实现:
使用 iOS 原生类 PHImageManager 的
来获取缩略图。