有没有适合长列表的轻量级 Flutter Network Image 插件?(最多可加载 500 多个图像网址)

TWH*_*TWH 5 flutter

所以我想要实现的是:

  1. 显示一长串酒店列表,每个酒店都有一个图像 URL。所有这些都是从 API 检索的。
  2. 我需要它平滑/轻量级,因此在加载和滚动时没有明显的 fps 下降 - 缓存不是必需的,但如果可以在没有内存问题的情况下实现那就太酷了。(IOS设备总是有这个问题,我相信是用iphone 6+测试的)
  3. 无论出现什么问题,都可以在加载时和加载失败时显示占位符图像。

我尝试过的:

  1. 缓存网络图像(我发现的最常见的解决方案。但是超过 100 个图像的内存问题。IOS 用户报告应用程序在滚动时或加载一段时间后崩溃/关闭。在他们的 github 问题中询问,似乎这是常见问题 - 仍然没有解决。尝试了那里的建议。仍然无济于事。
  2. 高级网络图像(加载列表时屏幕冻结,可能是因为它尝试一次加载所有图像网址),也没有在发生错误时使用占位符图像的选项,而不仅仅是在加载图像时。

有人遇到过类似的情况并找到了令人满意的解决方案以获得可接受的用户体验吗?我认为这将是一个足够常见的用例,可以顺利地显示来自网络的一长串图像,但我似乎无法解决这么长时间。请原谅我,但我是一个相对较新的移动开发人员,开始自学。任何帮助将非常感激。先感谢您。

Mig*_*ivo 3

您一次缓存大量内容,这可能会由于网络请求+处理(特别是在低端设备上)而导致意外行为。

您可以首先尝试增加cacheExtentfrom ,ListView让它在实际到达元素之前开始加载,并为您提供更流畅的体验。

    ListView.builder(
          cacheExtent: 1500, // Play with this offset value, by default is 250 pixels
          itemCount: items.length,
          itemBuilder: (_, __) => CachedNetworkImage(child: YourWidget()),
        );
Run Code Online (Sandbox Code Playgroud)

但是,不要将该值增加太多,因为它会迫使用户预先缓存内容,这可能是不必要的,这就是为什么ListView使用延迟构建来按需加载内容。