Flutter 如何使用SVG';飘动的网上有什么?
Flatter_web Doco对dart说:svg是移植的,但是如何在Flatter资产/小部件系统中使用它呢?老实说,我找到的最佳解决方案是通过网络为web加载图像。将资产存储在某个CDN上,从web版本的CDN中获取,然后在iOS/Android上从本地资产中检索 我使用以下库创建了一个Flutter 如何使用SVG';飘动的网上有什么?,flutter,flutter-web,Flutter,Flutter Web,Flatter_web Doco对dart说:svg是移植的,但是如何在Flatter资产/小部件系统中使用它呢?老实说,我找到的最佳解决方案是通过网络为web加载图像。将资产存储在某个CDN上,从web版本的CDN中获取,然后在iOS/Android上从本地资产中检索 我使用以下库创建了一个CrossPlatformSvg小部件:,类似于: class CrossPlatformSvg { static Widget asset( String assetPath, { d
CrossPlatformSvg
小部件:,类似于:
class CrossPlatformSvg {
static Widget asset(
String assetPath, {
double width,
double height,
BoxFit fit = BoxFit.contain,
Color color,
alignment = Alignment.center,
String semanticsLabel,
}) {
// `kIsWeb` is a special Flutter variable that just exists
// Returns true if we're on web, false for mobile
if (kIsWeb) {
return Image.network(
assetPath,
width: width,
height: height,
fit: fit,
color: color,
alignment: alignment,
);
} else {
return SvgPicture.network(
assetPath,
width: width,
height: height,
fit: fit,
color: color,
alignment: alignment,
placeholderBuilder: (_) => Container(
width: 30,
height: 30,
padding: EdgeInsets.all(30),
child: CircularIndicator(),
),
);
}
}
}
@阿泰伦什科夫的方法对我有效(见杰克回答下的评论)。下面是要实现的详细信息 iOS/Android
child: SvgPicture.asset('assets/yourimage.svg')
Web
// remove assets folder reference
child: SvgPicture.asset('yourimage.svg')
将这两个组合在一起…
import 'package:flutter/foundation.dart'; // provides kIsWeb property
...
child: kIsWeb ? SvgPicture.asset('yourimage.svg') : SvgPicture.asset('assets/yourimage.svg')
我的Flatter web应用程序可以在桌面web浏览器中呈现SVG,但不能在移动web浏览器中使用。我发现有必要使用canvaskit支持进行构建,以便SVG在移动设备上进行渲染:
flutter build web --web-renderer canvaskit
然而,canvaskit增加了大约2MB的下载量,这对我来说是一个破坏者。遗憾的是,在解决这一问题之前,我将使用光栅图像。我不知道如何使用dart:svg,但我创建了一个示例项目,该项目使用HtmlElementView在移动和web上显示svg:谢谢:)flatter_svg这是一个选项,但它仅适用于android/iOS,websafe_svg也可用于web,但不能像firefox上预期的那样工作。看起来websafe_svg中的firefox问题最近已经解决,现在应该可以安全使用了。如果您将svg放在资产目录下并在调试模式下调用Image.network,它甚至可以工作。在web上,我得到以下错误。所以我认为Image.network不支持SVG。在1.26.0-8.0.pre•channel dev上测试,在解析图像编解码器时引发了以下ImageCodeException:未能解码图像数据。似乎Flatter已放弃svg支持,请参阅