首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在preCachePicture()中使用flutter_svg

如何在preCachePicture()中使用flutter_svg
EN

Stack Overflow用户
提问于 2020-06-08 07:36:06
回答 2查看 8.5K关注 0票数 18

我使用svg包在我的应用程序中呈现SVG图像,因为flutter还没有正式支持SVG。在尝试在我的应用程序中加载SVG图像时,可能会延迟几秒钟。在寻找解决方案时,我发现可以使用preCachePicture()预加载SVG图像。问题是,官方的svg文档没有明确说明,也没有其他web材料显示如何使用此函数预加载SVG图像。

我在initState()中调用initState()函数来预加载SVG图片。

代码语言:javascript
运行
复制
String onboardImage = 'assets/images/onboard.svg';

@override
  void initState() {
    loadPictures();
    super.initState();
  }

  Future<void> loadPictures() async {
    await precachePicture(ExactAssetPicture((SvgPicture.svgStringDecoder),onboardImage), null);    
  } 

调用preCachePicture()之后,当我想要使用它时,如何加载预存储的映像?

EN

回答 2

Stack Overflow用户

发布于 2020-10-09 15:33:32

要缓存多个SVG,请执行以下操作:

代码语言:javascript
运行
复制
Future.wait([
  precachePicture(
    ExactAssetPicture(
      SvgPicture.svgStringDecoder, // See UPDATE below!
      'assets/my_icon.svg',
    ),
    null,
  ),
  precachePicture(
    ExactAssetPicture(
      SvgPicture.svgStringDecoder, // See UPDATE below!
      'assets/my_asset.svg',
    ),
    null,
  ),
  // other SVGs or images here
]);

注意:在main.dart中,或者在显示的小部件中,在使用SVG的小部件之前执行此操作。例如,如果您需要一个svg登录或注册,您可以在启动屏幕上这样做。

UPDATE:按照蓖麻碱的评论的说法,从2021年末开始,我们应该使用SvgPicture.svgStringDecoderOutsideViewBoxBuilderSvgPicture.svgStringDecoderBuilder代替SvgPicture.svgStringDecoder

票数 25
EN

Stack Overflow用户

发布于 2020-06-11 17:37:43

在小部件的initState中调用precache已经太晚了。相反,您应该在main()函数中调用这个方法,如下所示:

代码语言:javascript
运行
复制
Future<void> main() async {
    await precachePicture(ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/images/onboard.svg'), null);
    runApp(YourApp());
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62257156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档