【发布时间】:2018-05-29 21:52:37
【问题描述】:
我想在 Flutter 应用中更改 ImageCache 的行为。例如,我想尝试不同的驱逐策略。或者,我只是想要零缓存(用于试验)。
如何更换来改变ImageCache?
【问题讨论】:
我想在 Flutter 应用中更改 ImageCache 的行为。例如,我想尝试不同的驱逐策略。或者,我只是想要零缓存(用于试验)。
如何更换来改变ImageCache?
【问题讨论】:
创建一个继承自 WidgetsFlutterBinding 的类。 覆盖该类上的 createImageCache 以返回您选择的 ImageCache 实现。 在调用 runApp 之前调用该类的构造函数。
每个应用程序有一个绑定。创建的第一个绑定(BindingBase 的子类)将成为该绑定。调用 runApp() 实例化 WidgetsFlutterBinding 绑定,这通常是您想要的。 WidgetsFlutterBinding 混入的类之一是 PaintingBinding,它引入了 createImageCache 作为一种让您覆盖图像缓存的方法。它调用该方法,并将全局 imageCache 设置为该方法返回的任何值。
【讨论】:
ImageProvider 使用的ImageCache 包括AssetImageProvider 和其他东西使用全局imageCache。并且该全局使用 final ImageCache imageCache = new ImageCache(); 实例化。因为它是最终的,你不能改变它。
ServiceBinding连createImageCache都没有
imageCache 的实例化方式。另一方面,不是ServicesBinding,而是PaintingBinding
Ian Hickson 提案的代码 sn-p:
import 'package:flutter/widgets.dart';
class CustomImageCache extends WidgetsFlutterBinding {
@override
ImageCache createImageCache() {
// Set your image cache size
this.imageCache.maximumSize = 10;
return super.createImageCache();
}
}
【讨论】:
main 函数中初始化 CustomImageCache 即可。