Flutter 如何使用SVG';飘动的网上有什么?

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

Flatter_web Doco对dart说:svg是移植的,但是如何在Flatter资产/小部件系统中使用它呢?

老实说,我找到的最佳解决方案是通过网络为web加载图像。将资产存储在某个CDN上,从web版本的CDN中获取,然后在iOS/Android上从本地资产中检索

我使用以下库创建了一个
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支持,请参阅