[Flutter]Image图片缓存

2019/12/18 posted in  Flutter

源码分析

class Image extends StatefulWidget {

   Image.network(String src, {

   Key key,

   double scale = 1.0,

   this.width,

   this.height,

   this.color,

   this.colorBlendMode,

   this.fit,

   this.alignment = Alignment.center,

   this.repeat = ImageRepeat.noRepeat,

   this.centerSlice,

   this.matchTextDirection = false,

   this.gaplessPlayback = false,

   Map<String, String> headers,

     }) : image = new NetworkImage(src, scale: scale, headers: headers),

      assert(alignment != null),

      assert(repeat != null),

      assert(matchTextDirection != null),

      super(key: key);

  ......

我们看到Image是一个StatefulWidget对象,可以直接放到Container或者Column等容器里,其属性解释如下:

width:widget的宽度

height:widget的高度

color:与colorBlendMode配合使用,将此颜色用BlendMode方式混合图片

colorBlendMode:混合模式算法

fit:与android:scaletype一样,控制图片如何resized/moved来匹对Widget的size

alignment:widget对齐方式

repeat:如何绘制未被图像覆盖的部分

centerSlice:支持9patch,拉伸的中间的区域

matchTextDirection:绘制图片的方向:是否从左到右

gaplessPlayback:图片变化的时候是否展示老图片或者什么都不展示

headers:http请求头

image:一个ImageProvide对象,在调用的时候已经实例化,这个类主要承担了从网络加载图片的功能。它是加载图片的最重要的方法,不同的图片加载方式(assert文件加载、网络加载等等)也就是重写ImageProvider加载图片的方法(load())。

Image是一个StatefulWidget对象,所以我们看它的State对象: