146 votes

Rendu SVG Flutter

J'ai essayé d'ajouter une image avec une source SVG à mon application flutter.

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

Mais je n'ai eu aucun retour visuel. Comment puis-je afficher une image SVG dans Flutter?

4 votes

Essayez d'utiliser le paquet flutter_svg 0.14.0 facile à utiliser, ça marche comme un charme plus d'infos ici pub.dev/packages/flutter_svg, tous les remerciements à ce gars github.com/dnfield qui a porté la logique de rendu svg de chrome en dart

113voto

Dan Field Points 12945

Les polices de caractères sont une excellente option pour de nombreux cas.

J'ai travaillé sur une bibliothèque pour rendre des SVG sur un canevas, disponible ici : https://github.com/dnfield/flutter_svg

L'API actuelle ressemblerait à quelque chose comme

new SvgPicture.asset('nom_de_l_ressource.svg')

pour rendre l'élément nom_de_l_ressource.svg (dimensionné à son parent, par exemple un SizedBox). Vous pouvez également spécifier une couleur et un mode_de_mélange pour teinter la ressource.

Elle est désormais disponible sur pub et fonctionne avec un minimum de la version Flutter 0.3.6. Elle gère un tas de cas mais pas tout - consultez le dépôt GitHub pour les mises à jour et pour signaler des problèmes.

L'issue GitHub originale mentionnée par Colin Jackson ne concerne vraiment pas principalement les SVG dans Flutter. J'ai ouvert une autre issue ici pour cela : https://github.com/flutter/flutter/issues/15501

0 votes

Un peu hors sujet mais est-ce que cela prend en charge iOS? Autant que je sache, iOS prend en charge les vecteurs au format PDF donc je suis juste curieux de savoir si ceci peut être utilisé pour le rendu des vecteurs sur iOS également

3 votes

Il devrait fonctionner sur n'importe quelle plateforme prise en charge par Flutter. Tout est écrit en Dart en utilisant les méthodes Canvas.

1 votes

Pourquoi ne prend-il pas en charge la dernière version stable de Flutter au lieu de la version de prévisualisation

81voto

Collin Jackson Points 29995

Flutter ne prend pas en charge SVG pour le moment. Suivez l'issue 1831 pour les mises à jour.

Si vous avez absolument besoin d'un dessin vectoriel, vous pouvez consulter le widget Flutter Logo comme exemple de la façon de dessiner en utilisant l'API Canvas, ou de rasteriser votre image côté natif et de la passer à Flutter sous forme de bitmap, mais pour l'instant, votre meilleure option est probablement d'intégrer des images d'asset rasterisées en haute résolution.

0 votes

Aussi, si vous n'avez pas besoin de couleur, vous pouvez toujours suivre le chemin de la police comme le fait le package Icons.

1 votes

Eh bien après tout, il a juste besoin de rendre une image svg, n'importe quelle bibliothèque svg pourrait le faire comme celle-ci pub.dev/packages/flutter_svg

0 votes

Le problème est ouvert depuis le 13 février 2016. Combien de temps devons-nous attendre ?

33voto

Sunil Points 420

Les développeurs de la communauté Flutter ont créé une bibliothèque pour gérer les fichiers svg. Nous pouvons l'utiliser comme

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

J'ai trouvé un petit exemple d'implémentation SVG ici.

6 votes

Juste pour information - il ne s'agit pas d'un plugin officiel/première partie. Cela dit, il devrait prendre en charge de nombreux cas d'utilisation courants.

0 votes

Oui, et la chose sur laquelle ce plugin dépend d'autres packages, il est très important de le garder à jour par les auteurs. Je ne peux pas utiliser ce package car un autre package entre en conflit avec sa dépendance ancienne xml ^4.0.x

27voto

Victor Tong Points 242

La solution temporaire est d'utiliser des polices de caractères

https://icomoon.io/

  polices:
   - famille: icomoon
     polices:
       - ressource: assets/fonts/icomoon.ttf

Utilisation

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

Remplacer les ### par exemple (906)

0 votes

Comment puis-je utiliser ceci? disons que j'ai un fichier svg dans asset/svg/mysvg.svg Je ne peux pas remplacer l'hex par le chemin. Le premier argument est un entier.

3voto

Arun R. Prajapati Points 101

Salut vous pouvez utiliser le plugin "flutter_svg" : https://pub.dartlang.org/packages/flutter_svg

Simple et facile, vous pouvez également changer la couleur du SVG.

final String assetName = 'assets/up_arrow.svg';
final Widget svgIcon = new SvgPicture.asset(
     assetName,
     color: Colors.red,
     semanticsLabel: 'Un flèche vers le haut rouge'
);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X