【问题标题】:How to cache a future string in flutter如何在颤动中缓存未来的字符串
【发布时间】:2021-07-05 18:13:14
【问题描述】:

我正在遍历对象的列表视图,并从 package:favicon/favicon.dart 中检索图标 URL 作为 future:FutureBuilder 中的 future:。然后,我使用这些 URL 将 favicon 图像返回并缓存在容器中,作为带有 CachedNetworkImageProvider 的前导 listtile 图标。

这很好用,但是每次刷新列表视图时都需要时间来加载,因为它必须从 favicon url getter 中检索最佳 url。

如何缓存 future: 值,以便在第一次使用后使用 URL 检索器没有延迟。代码如下:

return new ListTile(
  leading: 
  FutureBuilder(
  future: iconz.Favicon.getBest(urlBase),
    builder: (context, snapShot2) {
      if (snapShot2.hasData){
       String urlIcon = snapShot2.data.url.toString();
       var containImage = Container(
       height: 40,
       width: 40,
       decoration: BoxDecoration(
       shape: BoxShape.circle,
       image: DecorationImage(           
       image: CachedNetworkImageProvider(urlIcon),
       fit: BoxFit.fill
       ),
       ),
       );
       return containImage;
     } 
     else {
      return 
      const Icon(Icons.remove_red_eye, color: Color(0xff00caff), size: 40);
     }
    }

  ),

  title: ...

总结:如何在future: iconz.Favicon.getBest(urlBase),上使用flutter_cache_manager?

【问题讨论】:

  • 澄清一下,每次刷新时网址都不会改变?
  • 他们可以,但通常不会。 URL 是 Fl​​utter favicons api 为相应 url 返回的“最佳” favicon url。

标签: flutter dart asynchronous caching flutter-futurebuilder


【解决方案1】:

您可以将数据缓存在地图中,该地图存储在状态持久的地方。

// Make sure this is declared somewhere stateful
final Map<String, String> _urls;

/// Retrieves and caches favicon data.
Future<String> _getBest(String urlBase) async () =>
    _urls[urlBase] ??= (await iconz.Favicon.getBest(urlBase)).url.toString();

// Now use `_getBest(urlBase)` as your `FutureBuilder` `Future`.

【讨论】:

  • 我无法让它工作。 future _getBest 是否应该被声明为函数并在将来调用:var?
  • 它的编写方式,似乎我们在声明 Future 时返回了一个字符串。此外,“Favicon”不是一种类型。声明应该是 Future 吗?
  • 抱歉,它应该返回一个Future&lt;String&gt;。是的,在您的 FutureBuilder 构造中调用它。
  • 好的,这是可行的,但是仍然需要一些时间来获取 url。我的地图当前存储在父类的状态类中。即 B 类扩展 State { final Map _urls = {}; }。如何使用缓存管理器或将其放在某个地方以便实际缓存?
猜你喜欢
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多