Flutter Widget 之CachedNetworkImage

725 阅读1分钟

若说一图抵过千言万语,那用在您的应用程序中的一些好图绝对值得加载所需的成本。

ezgif.com-gif-maker.gif

但若没留意,用户每次开启应用时就付出一次代价,为避免此问题,可使用cached_network_image

首先在你的应用程序中找到那个得重复下载到令人厌烦的小部件Image.network

Image.network("http://my-image.jpg")

然后将其转换为CachedNetworkImage,大功告成

CachedNetworkImage(
    imageUrl: "http://my-image.jpg",
)

这样,您的Flutter应用将再次下载该图像并加以保存备用

ezgif.com-gif-maker (1).gif

好吧,也许没那么简单。CachedNetworkImage构造函数又很多自定义选项

使用placeholder占位符参数控制下载图像时的显示内容

CachedNetworkImage(
    imageUrl: "http://my-image.jpg",
    placeholder: (context, url) => Text('Loading $url'),
)

progressIndicatorBuilder这项参数所提供的更新,则是另一途径. 在取得最后所需的行为前还有许多其他参数可尝试

CachedNetworkImage(
    imageUrl: "http://my-image.jpg",
    progressIndicatorBuilder: (_, url, download) {
        if (download.progress != null) {
            final percent = download.progress! * 100;
            return Text('$percent% done loading');
        }
        return Text('Loaded $url');
    }
)

但你可能想知道,若我要尝试缓存BoxDecoratioon图像属性怎么办?那种NetworkImage对象并非小部件,而是一中图片来源.

CachedNetworkImage无法在该处充当占位符

Container(
    decoration: BoxDecoration(
        image: NetworkImage("https://my-image.jpg'),
    )
)

好在还有办法满足此目的,亦即CacheNetworkImageProvider

Container(
    decoration: BoxDecoration(
        image: CachedNetworkImageProvider(
            'https://my-image.jpg',
        )
    )
)

因此下次打算用图像省去长篇大论以便替用户减少资料传输量情,使用CachedNetworkImage

如果想了解有关CachedNetworkImage 的内容,或者关于Flutter的其他功能,请访问flutter.dev

原文翻译自视频:视频地址