如何从 SVG 字符串预缓存 SVG 图像?

How to precache a SVG image from a SVG string?

我已经在使用 flutter_svg 库中的 precachePicture 函数来加载 svg 资源:

Future<void> loadPictures() async {
  await precachePicture(
    ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/graphic/two_people.svg'),
    context,
  ); 
}

但是我有一些原始 svg 字符串(比这个更复杂)也需要预缓存

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240"><polygon points="120 8.9 147.31 93.45 236.99 93.45 164.41 146.38 191.77 231.09 120 178.76 48.23 231.09 75.59 146.37 3.01 93.45 92.69 93.45 120 8.9" fill="#f8d64e"/></svg>

如何从 SVG 字符串预缓存 SVG 图像?

所以,我终于找到了解决方案:

svgString = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240"><polygon points="120 8.9 147.31 93.45 236.99 93.45 164.41 146.38 191.77 231.09 120 178.76 48.23 231.09 75.59 146.37 3.01 93.45 92.69 93.45 120 8.9" fill="#f8d64e"/></svg>';

Future<void> loadSvgPictureFromSvgString() async {
  await precachePicture(
            StringPicture(SvgPicture.svgStringDecoder, svgString), context); //context or null
}
  

现在,当您调用 SvgPicture.string(svgString) 时,图像已经被预缓存,因此如果 svgString 有点复杂,则不会延迟渲染。