Flutter SVG渲染


90

我尝试将带有SVG源的图像添加到我的flutter应用程序中。

new AssetImage("assets/images/candle.svg"))

但是我没有任何视觉反馈。如何在Flutter中渲染SVG图片?


4
尝试使用简单易用的flutter_svg 0.14.0 包,它的工作原理就像魅力更多信息在这里pub.dev/packages/flutter_svg,这要感谢这个家伙github.com/dnfield,他将chrome的svg渲染逻辑移植到了dart
maheshmnj

Answers:


63

Flutter当前不支持SVG。请关注问题1831,以获取更新。

如果您绝对需要矢量绘图,则可以看到Flutter Logo小部件作为使用CanvasAPI进行绘制的示例,或者在本机光栅化图像并将其作为位图传递给Flutter,但目前最好的选择是嵌入高分辨率的光栅化资产图像。


同样,如果您不需要颜色,则可以始终按照Icons包的方式进行字体选择。
prodaea

毕竟,他只需要简单地渲染svg图像,任何svg库都可以像这样pub.dev/packages/flutter_svg
maheshmnj

该问题自2016年2月13日起开放。我们需要等待多长时间?
BloodLoss

70

在很多情况下,字体都是不错的选择。

我一直在研究在画布上渲染SVG的库,可在这里找到:https : //github.com/dnfield/flutter_svg

到目前为止的API看起来像

new SvgPicture.asset('asset_name.svg')

渲染asset_name.svg(大小为其父对象,例如a SizedBox)。您还可以指定colorblendMode来为资产着色。

现在,它可以在pub上使用,并且最低可使用Flutter 0.3.6版本。它可以处理很多情况,但不能处理所有情况-有关更新和文件问题,请参阅GitHub存储库。

实际上,Colin Jackson所引用的原始GitHub问题并不意味着主要关注Flutter中的SVG。我在这里为此打开了另一个问题:https : //github.com/flutter/flutter/issues/15501


有点偏离主题,但这有iOS支持吗?据我所知,iOS支持PDF格式的矢量,所以我很好奇它是否也可以用于在iOS上渲染矢量
MRainzo

3
它可以在Flutter支持的任何平台上工作。这些都是使用Canvas方法在Dart中编写的。
丹·菲尔德

1
为什么不支持最新的flutter稳定预览呢?
minigeek

嗨,丹,您还可以添加对dart:svg库的支持-api.dart.dev/stable/2.9.2/dart-svg/dart-svg-library.html吗?flutter是否支持dart2?我想将多个SVGElement全部组合成一个大的序列化字符串,然后使用您的库来呈现SVG
abhijat_saxena

dart:svg与HTML和dart2js一起使用。与此完全不同。
丹菲尔德

25

Flutter社区的开发人员创建了一个库来处理svg文件。我们可以将其用作

new SvgPicture.asset(
  'assets/images/candle.svg',
  height: 20.0,
  width: 20.0,
  allowDrawingOutsideViewBox: true,
),

我在这里找到了一个SVG实现的小例子。


5
仅供参考-这不是官方/第一方插件。也就是说,它应该支持许多常见的用例。
丹·菲尔德

21

现在的解决方法是使用字体

https://icomoon.io/

  fonts:
   - family: icomoon
     fonts:
       - asset: assets/fonts/icomoon.ttf

使用情况

  static const IconData TabBarHome= const IconData(0xe906, fontFamily: 'icomoon');
  static const IconData TabBarExplore= const IconData(0xe902, fontFamily: 'icomoon');

替换###例如(906)



3

您可以使用flare创建动画,只需将.flr导入为资产

import 'package:flare_flutter/flare_actor.dart';
class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return new FlareActor("assets/Filip.flr", alignment:Alignment.center, fit:BoxFit.contain, animation:"idle");
  }
}

访问flare_flutter https://pub.dev/packages/flare_flutter


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.