如何在颤振中缓存未来的字符串

时间:2021-04-09 21:07:43

标签: flutter dart asynchronous caching flutter-futurebuilder

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

这很好用,但是每次刷新 listview 时都需要时间来加载,因为它必须从 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 ?

1 个答案:

答案 0 :(得分:0)

您可以将数据缓存在存储在状态持久的位置的地图中。

// 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`.