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
TextSpanvoir crossdart.info/p/flutter/0.0.38-dev/src/widgets/...