J'utilise un CustomPainter
pour dessiner dans Flutter comme ceci:
@override void paint(Canvas canvas, Size size) { canvas.drawRect(...); canvas.drawImage(...); ... }
Comment dessiner une Icon
sur une canvas
?
3 Réponses :
Créez un Paragraph
contenant le point de code dans la police correcte, stylisez-le selon vos besoins, puis dessinez-le.
final icon = Icons.add; var builder = ui.ParagraphBuilder(ui.ParagraphStyle( fontFamily: icon.fontFamily, )) ..addText(String.fromCharCode(icon.codePoint)); var para = builder.build(); para.layout(const ui.ParagraphConstraints(width: 60)); canvas.drawParagraph(para, const Offset(20, 20));
@Richard Heap et @pskink sur la base de vos réponses, j'essayais et je suis venu avec ceci: Merci les gars, c'est ce que je cherchais moi aussi.
final icon = Icons.add; TextPainter textPainter = TextPainter(textDirection: TextDirection.rtl); textPainter.text = TextSpan(text: String.fromCharCode(icon.codePoint), style: TextStyle(fontSize: 40.0,fontFamily: icon.fontFamily)); textPainter.layout(); textPainter.paint(canvas, Offset(50.0,50.0));
existe-t-il un moyen d'ajouter un GestureDetector sur l'icône?
1) Si vous voulez dire le widget IconButton - Il a une fonction onPressed. 2) Si vous souhaitez ajouter le CustomPainter ci-dessus, ajoutez-le en tant qu'enfant à Container. Le parent de ce conteneur peut être un GeatureDetector ou InkWell.
Vous devez également transmettre la couleur à TextStyle. Sinon, vous ne verrez rien.
Juste pour ajouter un petit détail important, si vous essayez de rendre une icône à partir d'un pack d'icônes externe (tel que Material Design Icons ou FontAwesome), vous devez ajouter le paramètre de package
dans TextStyle
.
final icon = MdiIcons.check; TextPainter textPainter = TextPainter(textDirection: TextDirection.ltr); textPainter.text = TextSpan( text: String.fromCharCode(icon.codePoint), style: TextStyle( color: Colors.black, fontSize: size, fontFamily: icon.fontFamily, package: icon.fontPackage, // This line is mandatory for external icon packs ), ); textPainter.layout(); textPainter.paint(canvas, Offset(x, y));
tu veux dire cette icône ? si oui, vous ne pouvez pas faire ça
Oui, je suis à propos de cette icône . Et c'est très étrange si c'est le cas (même si l'icône n'est en fait pas une image mais créée à partir d'une police TTF en interne).
c'est un
TextSpan
voir crossdart.info/p/flutter/0.0.38-dev/src/widgets/...