首页 > 解决方案 > 在颤振中预缓存多个 svg 资产

问题描述

我的资产中有 15-20 个 svg,我想预缓存。目前正在我的 void main 中做这件事。 代码:-

try{
    Future.wait([
      precachePicture(ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/1.svg'), null,),
Future.wait([
      precachePicture(ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/2.svg'), null,),
Future.wait([
      precachePicture(ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/3.svg'), null,),
Future.wait([
      precachePicture(ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/4.svg'), null,),
Future.wait([
      precachePicture(ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/5.svg'), null,),
Future.wait([
      precachePicture(ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/6.svg'), null,),
Future.wait([
      precachePicture(ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/7.svg'), null,),
Future.wait([
      precachePicture(ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/8.svg'), null,),
Future.wait([
      precachePicture(ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/9.svg'), null,),
Future.wait([
      precachePicture(ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/10.svg'), null,),
  }
  catch(e){print(e);}

所以,我的问题是缓存它们的更好方法是什么,即在我的主屏幕或启动画面中缓存资产,或者在两者上缓存资产。其次,如果我在主文件中缓存多个图像,我的应用程序是否需要更多时间来渲染第一帧?

标签: fluttercachingflutter-dependencies

解决方案


有点晚了,但你的用法Future.wait是错误的。它需要一个迭代器作为参数,所以Future.wait整个预加载只需要一个。例子:

final svgs = ['assets/1.svg', 'assets/2.svg', ]; // all the svg that needs preloading
final promises = svgs.map((e) => precachePicture(
          ExactAssetPicture(SvgPicture.svgStringDecoder, e), null));
await Future.wait(promises);

我建议您在启动画面中执行此操作,而不是在main. 因为如果你在 UI 渲染之前这样做,它会给你的应用程序挂起的印象(白屏),所以至少显示一些不错的东西,让用户感觉你的应用程序启动得更快。


推荐阅读