flutter - 在颤振中预缓存多个 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);}
所以,我的问题是缓存它们的更好方法是什么,即在我的主屏幕或启动画面中缓存资产,或者在两者上缓存资产。其次,如果我在主文件中缓存多个图像,我的应用程序是否需要更多时间来渲染第一帧?
解决方案
有点晚了,但你的用法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 渲染之前这样做,它会给你的应用程序挂起的印象(白屏),所以至少显示一些不错的东西,让用户感觉你的应用程序启动得更快。
推荐阅读
- javascript - 从下拉列表中获取值并返回表单字段
- php - 如何在 cURL PHP 中使用 Google 脚本?
- java - 具有 SVN 集成的 Spring Tool Suite - java 类旁边括号中的数字是什么意思
- vb.net - 使用 ProgressBar 复制目录和文件
- java - 具有窗口大小调整的 JavaFX 缩小按钮
- fish - 鱼壳:如何将元素附加到数组
- mongodb - mongodb嵌套数组元素$lookup
- python - 序列化程序中嵌套字段的自定义验证器
- c++ - 寻找地图技术
- python - 如何使用 python 3 的特定子版本运行 python 脚本#!python3 命令