【问题标题】:How do I change or replace the ImageCache in Flutter?如何更改或替换 Flutter 中的 ImageCache?
【发布时间】:2018-05-29 21:52:37
【问题描述】:

我想在 Flutter 应用中更改 ImageCache 的行为。例如,我想尝试不同的驱逐策略。或者,我只是想要零缓存(用于试验)。

如何更换来改变ImageCache?

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    创建一个继承自 WidgetsFlutterBinding 的类。 覆盖该类上的 createImageCache 以返回您选择的 ImageCache 实现。 在调用 runApp 之前调用该类的构造函数。


    每个应用程序有一个绑定。创建的第一个绑定(BindingBase 的子类)将成为该绑定。调用 runApp() 实例化 WidgetsFlutterBinding 绑定,这通常是您想要的。 WidgetsFlutterBinding 混入的类之一是 PaintingBinding,它引入了 createImageCache 作为一种让您覆盖图像缓存的方法。它调用该方法,并将全局 imageCache 设置为该方法返回的任何值。

    【讨论】:

    • 我非常怀疑。 ImageProvider 使用的ImageCache 包括AssetImageProvider 和其他东西使用全局imageCache。并且该全局使用 final ImageCache imageCache = new ImageCache(); 实例化。因为它是最终的,你不能改变它。
    • 其实看源码ServiceBindingcreateImageCache都没有
    • 我的错,有一个新的 alpha 版本改变了 imageCache 的实例化方式。另一方面,不是ServicesBinding,而是PaintingBinding
    • 啊,是的,我的错。修正了类的名称。
    【解决方案2】:

    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();
          }
        }
    

    【讨论】:

    • 无法理解必须在何处以及如何使用它。请你解释一下好吗?
    • 您不应该对图像缓存有任何问题。据我所知,Flutter 团队解决了这个问题。无论如何,如果您需要它,只需在 main 函数中初始化 CustomImageCache 即可。
    • 如果我在 main fn 中初始化 CustomImageCache,它会给我一个类似“Calling maximumSize on null”的错误
    • 请问您为什么现在需要这样做?过去,Flutter 在 ImageCaches 上有一个错误。很久以前就修好了。
    猜你喜欢
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多