Флеттер SVG-рендерінг


90

Я спробував додати зображення з джерелом SVG до мого додатку, що флаттер.

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

Але візуального зворотного зв’язку я не отримав. Як я можу зробити зображення SVG у Flutter?


4
спробуйте використати простий у використанні flutter_svg 0.14.0 пакет, він працює як шарм, більше інформації тут pub.dev/packages/flutter_svg , все завдяки цьому хлопцеві github.com/dnfield, який переніс логіку візуалізації svg chrome на dart
maheshmnj

Відповіді:


63

На даний момент Flutter не підтримує SVG. Слідкуйте за номером 1831, щоб отримати оновлення.

Якщо вам абсолютно потрібне векторне малювання, ви можете побачити віджет Логотипу Flutter як приклад того, як малювати за допомогою CanvasAPI, або растеризувати своє зображення на рідній стороні та передати його Flutter як растрове зображення, але наразі найкращим варіантом є, мабуть, вбудовувати растрові зображення активів із високою роздільною здатністю.


Крім того, якщо вам не потрібен колір, ви завжди можете пройти шлях шрифту так, як це робить пакет Icons.
продаєа

ну, врешті-решт, йому потрібно просто відтворити зображення svg, яке може зробити будь-яка бібліотека svg, як це pub.dev/packages/flutter_svg
maheshmnj

випуск відкритий з 13 лютого 2016 року. як довго нам потрібно чекати?
BloodLoss

71

Шрифти - чудовий варіант для багатьох випадків.

Я працював над бібліотекою для відтворення SVG на полотні, доступне тут: https://github.com/dnfield/flutter_svg

Зараз API виглядатиме приблизно так

new SvgPicture.asset('asset_name.svg')

візуалізувати ім'я_активу.svg (розмір його батьківського, наприклад, а SizedBox). Ви також можете вказати colorі blendModeдля тонування об’єкта.

Тепер він доступний у пабі та працює з мінімальною версією Flutter 0.3.6. Він обробляє купу випадків, але не все - див. Репозитарій GitHub, щоб отримати оновлення та виправити проблеми.

Оригінальна проблема GitHub, на яку посилається Колін Джексон, насправді не має на меті бути зосередженою переважно на SVG у Flutter. Я відкрив тут ще одне видання для цього: https://github.com/flutter/flutter/issues/15501


Трохи не в темі, але чи підтримує це підтримку iOS? Наскільки мені відомо, iOS підтримує вектори у форматі PDF, тому мені просто цікаво, чи можна це використовувати для рендерингу векторів і на iOS
MRainzo,

3
Він повинен працювати на будь-якій платформі, що підтримує Flutter. Все це написано на Dart з використанням Canvasметодів.
Ден Філд

1
чому він не підтримує останню
флетер

Привіт Ден, ти можеш також додати підтримку для - dart: svg library - api.dart.dev/stable/2.9.2/dart-svg/dart-svg-library.html ? flutter має підтримку dart2? Я хочу мати кілька елементів SVGE, об'єднаних в один великий серіалізований рядок, а потім використовувати вашу бібліотеку для візуалізації SVG
abhijat_saxena

dart: svg використовується з HTML і dart2js. Це сильно відрізняється від цього.
Dan Field

25

Розробники із спільноти Flutter створили lib для обробки SVG-файлів. Ми можемо використовувати його як

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

Я знайшов невеликий приклад SVG реалізації тут .


5
Просто FYI - це не офіційний плагін. Тим не менш, він повинен підтримувати багато загальних випадків використання.
Dan Field

21

На даний момент робота полягає у використанні шрифтів

https://icomoon.io/

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

Useage

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

Замініть ### наприклад (906)


9

Ви можете виконати наведені нижче дії
- відвідайте http://fluttericon.com
- завантажте свої піктограми SVG
- натисніть кнопку завантаження
- ви отримаєте два файли
1. iconname.dart
2. файл шрифта iconname.ttf
- використовуйте цей файл у flutter & імпорт iconname.dart


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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.