FlutterSVGレンダリング


92

SVGソースを含む画像をフラッターアプリケーションに追加してみました。

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

しかし、視覚的なフィードバックは得られませんでした。FlutterでSVG画像をレンダリングするにはどうすればよいですか?


4
使用にシンプルを使用してみてくださいflutter_svg 0.14.0 、それがここの魅力の詳細情報のように動作し、パッケージpub.dev/packages/flutter_svgこの男に、すべての感謝をgithub.com/dnfieldダーツにクロームのSVGレンダリングロジックを移植
maheshmnj

回答:


65

Flutterは現在SVGをサポートしていません。更新については、問題1831に従ってください。

ベクター描画がどうしても必要な場合は、APIを使用して描画する方法の例として、Flutter Logoウィジェットを表示するかCanvas、ネイティブ側で画像をラスタライズしてビットマップとしてFlutterに渡すことができますが、今のところ最善の策はおそらく高解像度のラスタライズされたアセット画像を埋め込みます。


また、色が必要ない場合は、Iconsパッケージと同じようにいつでもフォントルートを使用できます。
prodaea 2018年

結局のところ、彼は単純にsvgイメージをレンダリングする必要があります。svg
packages / flutter_svg –maheshmnj19年

この号は2016年2月13日から公開されています。どのくらい待つ必要がありますか?
BloodLoss

@BloodLossはダンフィールドの答えを見てください。ユーザーflutter_svgパッケージ
kovalyovi

75

フォントは多くの場合に最適なオプションです。

私はSVGをキャンバスにレンダリングするためのライブラリに取り組んでいます。https//github.com/dnfield/flutter_svgから入手できます。

現在のAPIは次のようになります

new SvgPicture.asset('asset_name.svg')

Asset_name.svgをレンダリングします(親に合わせたサイズ、たとえばa SizedBox)。アセットに色を付けるためにcolorblendModeを指定することもできます。

現在、パブで利用可能であり、Flutterバージョン0.3.6以上で動作します。すべてではありませんが、多数のケースを処理します。更新とファイルの問題については、GitHubリポジトリを参照してください。

Colin Jacksonが参照した元のGitHubの問題は、実際には主にFlutterのSVGに焦点を当てることを意図したものではありません。そのためにここで別の問題を開きました:https//github.com/flutter/flutter/issues/15501


少し外れたトピックですが、これはiOSをサポートしていますか?これはiOSの上のベクトルをレンダリングするために使用することができる場合、私はちょうど好奇心が強いので、私の知る限りでは、iOSのは、同様にPDF形式でベクトルをサポート
MRainzo

3
Flutterがサポートするすべてのプラットフォームで動作するはずです。それはすべてCanvasメソッドを使用してDartで書かれています。
ダンフィールド

1
なぜ代わりにプレビューそれは、最新のフラッタの安定をサポートするdoesntの
minigeek

こんにちはダン、-dart:svgライブラリ-api.dart.dev/stable/2.9.2/dart-svg/dart-svg-library.htmlのサポートも追加できますか?flutterはdart2をサポートしていますか?私は、複数のSVGElementsがすべて一つの大きなシリアル化された文字列に結合して、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)


どうすればこれを使用できますか?アセット/svg/mysvg.svgにsvgファイルがあるとしましょう。16進数をパスに置き換えることはできません。最初の引数はintです。
FrontMobe

9

あなたは、手順の下に従うことができます
-訪問http://fluttericon.com
-あなたのSVGのアイコンをアップロードし
、ダウンロードボタンをクリックしてください-
あなたは二つのファイルを取得します-
1. iconname.dart
2. iconname.ttfフォントファイルを
-フラッターでこのファイルを使用して& iconname.dartをインポートします


3

フレアを使用してアニメーションを作成し、.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_flutterhttps //pub.dev/packages/flare_flutterにアクセスします


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.