重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
图片加载过程是由ImageProvider触发的。而ImageProvider表示异步获取图片数据的操作,可以从资源,网络,文件等不同的渠道获取。
创新互联建站主要从事网站建设、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务当涂,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
首先,ImageProvider根据_ImageState中传递的图片配置生成对应的图片缓存key,然后去ImageCache中查找是否由对应的图片缓存,如果有,通知刷新对应的UI;如果没有通过ImageStream异步加载,加载完成后更新缓存,然后通知_ImageState刷新UI。
ImageCache采用的是LRU(Least Recently Used)
这个小例子使用的是豆瓣 API 中 正在上映的电影 的开放接口,要实现的主要效果如下:
JSON 数据结构
一. flutter中我们想加载本地图片,需要两步:
二. flutter项目中本地图片加载的原理
在加载图片时,系统自动会根据屏幕分辨率优先选择到符合自己分配率的文件夹(2.0x或者3.0x或者4.0x)下去取相对应的图片,如果当前文件夹下没有,则会到低一倍的文件夹下去,如果还没有,则继续向更低一倍去取。(比如:iOS 5.5英寸及以上屏幕会优先选择去3.0x下去取图片,如果3.0x不存在或者3.0x文件夹下没有,则去2.0x下取;如果2.0x不存在或者2.0x下没有,则去1.0x下取;1.0x下再没有,则在images文件下取)。
1.说明:
我们都知道在使用 Android 原生开发 app 的时候不同分辨率的图片放置到下面对应的文件夹中:
但是使用 Flutter 开发 app 时却有不同,他们也有一个对应的关系,按照他们的对应关系建立文件夹就可以了,如下:
2.使用:
首先在 Flutter 项目根目录中创建一个 images 文件夹用来存放图片资源;
然后在项目目录下找到 pubspec.yaml 文件打开,声明图片资源;
如何加载不同分辨率的图呢,例如 android 中的 hdpi,xhdpi,xxhdpi 和 ios 中的 1x,2x,3x。只需要在 images 文件夹中在创建两个 2.0x,3.0x 文件夹用来存放 2x,3x 的图片资源:
如上图,1.0x 图片放到了 account 文件夹中,account 文件夹下又有 1.5x、2.0x、3.0x、4.0x 文件夹,分别存放对应分辨率的图片,这里要注意文件夹的对应关系。
使用图片时,只需要使用 account 文件夹下的图片就行了,系统会根据手机的分辨率,加载对应文件夹中的图片,如:
开发过程工我们会用webview显示一些活动或是变动比较频繁的页面,若是webview中包含图片,一般会有保存图片的需求,我们可以采用js交互的形式获取图片的url,话不多说直接看操作
获取点击位置的element,中的src值,即可
补充问题
1、在安卓设备上发现长按手势并没有调用,翻看 webview_flutter 发现需要设置安卓的类型,展示webview之前设置
2、获取到的url也就是开始返回的value值,安卓会带有”“,需要自行去掉