预加载网络映像以避免加载时间

时间:2018-03-23 16:22:24

标签: dart flutter

我想通过按下按钮添加和删除每个项目,以避免网络图像的加载时间。 我的想法是将〜5个图像添加到堆栈中,并且能够移除顶部图像并将另一个图像添加到背面,以便可以预加载。

如果使用Stack class

,我找不到任何文档或答案

我也有使用Dismissible的想法,但似乎没有办法改变它的儿童和背景。

1 个答案:

答案 0 :(得分:1)

您不必创建堆栈来预加载图像;您正在寻找的是NetworkImage类。您可以维护一组您手动加载的NetworkImage类,并将其中一个传递给Image构造函数,但我确信flutter实际缓存了您最后几张图像。自动加载到内存中,甚至不需要(我想我听过最后100张图片,但我可能错了)。

不幸的是,API并不是那么简单(在颤动的回购中有bug对此开放),但它也不是那么困难。< / p>

你需要的只是一个像这样的方法(或者只是在构建函数中执行它):

static void preload(BuildContext, String path) {
  var configuration = createLocalImageConfiguration(context);
  new NetworkImage(path)..resolve(configuration);
}

从任何有效的构建上下文的地方调用它。和TBH一样,你可以自己构建ImageConfiguration并将其传递给它(只需查看createLocalImageConfiguration的来源就可以了解它。)

如果你想对它有点兴趣,而不是仅仅制作一个NetworkImage并解析它,你可以有一个类来维护一个预加载的NetworkImage的地图并在你的时候返回它们想。

你可以做的另一件事可能足以解决你的问题,而不做任何其他事情是设置gaplessPlayback = true你构建你的Image.net工作 - 这将确保图像不会切换,直到下一张图片已满载。

希望有帮助=)。如果它实际上没有工作让我知道,我会深入挖掘一下 - 我自己还没有在代码中完成它。