我正在遍历对象的列表视图,并从 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 ?
答案 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`.