我使用svg包在我的应用程序中呈现SVG图像,因为flutter还没有正式支持SVG。在尝试在我的应用程序中加载SVG图像时,可能会延迟几秒钟。在寻找解决方案时,我发现可以使用preCachePicture()预加载SVG图像。问题是,官方的svg文档没有明确说明,也没有其他web材料显示如何使用此函数预加载SVG图像。
我在initState()
中调用initState()
函数来预加载SVG图片。
String onboardImage = 'assets/images/onboard.svg';
@override
void initState() {
loadPictures();
super.initState();
}
Future<void> loadPictures() async {
await precachePicture(ExactAssetPicture((SvgPicture.svgStringDecoder),onboardImage), null);
}
调用
preCachePicture()
之后,当我想要使用它时,如何加载预存储的映像?
发布于 2020-10-09 15:33:32
要缓存多个SVG,请执行以下操作:
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.svgStringDecoderOutsideViewBoxBuilder
或SvgPicture.svgStringDecoderBuilder
代替SvgPicture.svgStringDecoder
。
发布于 2020-06-11 17:37:43
在小部件的initState中调用precache已经太晚了。相反,您应该在main()函数中调用这个方法,如下所示:
Future<void> main() async {
await precachePicture(ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/images/onboard.svg'), null);
runApp(YourApp());
}
https://stackoverflow.com/questions/62257156
复制相似问题