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

Preload network images to avoid load times

我想通过按下按钮在每个项目的顶部添加和删除项目,以避免网络图像的加载时间。 我的想法是将大约 5 张图像添加到一个 Stack 中,并能够移除顶部的图像并将另一个图像添加到后面,这样它就可以 pre-load.

如果 Stack class

可以的话,我没有找到任何文档或答案

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

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

不幸的是,API 并不是那么简单(在 flutter repo 中有一个 bug open about this),但也不是那么困难。

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

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

从任何具有有效构建上下文的地方调用它。 TBH,您可以自己构造 ImageConfiguration 并将其传递给其他人(只需查看 createLocalImageConfiguration 的源代码即可了解相关信息)。

如果你想对它更感兴趣,而不是仅仅制作一个 NetworkImage 并解析它,你可以有一个 class 来维护预加载的 NetworkImage 的映射s 和 returns 他们需要的时候。

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

希望对您有所帮助 =)。如果它实际上不起作用,请告诉我,我会更深入地挖掘 - 我自己还没有用代码完成它。