Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Créer des vues personnalisées avec Flutter

Créer des vues personnalisées avec Flutter

Nouvelle session de notre communauté locale Dart & Flutter. Elle a porté sur les animations avec Flutter

Agnaramon Boris-Carnot

September 06, 2020
Tweet

More Decks by Agnaramon Boris-Carnot

Other Decks in Programming

Transcript

  1. Créer des vues personnalisées avec Flutter Agnaramon Boris-Carnot @agnamc9 Dimanche

    6 Septembre 2020 11h - 13h https://meet.google.com/zcb-eofi-zmb Rejoignez notre communauté Dart & Flutter https://discord.gg/rpmKTAN
  2. Row( ... children: [ FloatingActionButton( onPressed: () {}, child: Text(

    '-', style: TextStyle(color: Colors.white, fontSize: 24), ), ), ... Text('$_counter', style: TextStyle(fontSize: 24)), ... FloatingActionButton( onPressed: () {}, child: Text( '+', style: TextStyle(color: Colors.white, fontSize: 24), ), ), ], )
  3. class CompoundWidget extends StatefulWidget { final Function onChanged; const CompoundWidget({Key

    key, this.onChanged}) : super(key: key); @override _CompoundWidgetState createState() => _CompoundWidgetState(); } class _CompoundWidgetState extends State<CompoundWidget> { int _counter = 0; Function _onChanged = (value) {}; ... } Composition
  4. Utilisation CompoundWidget( onChanged: (value) { // get widget value },

    ) Source: https://gist.github.com/agnamc9/7619 70ee202b352823cbc62047b52c9c Composition
  5. • Fournit une surface sur laquelle dessiner • Utilise un

    CustomPainter pour dessiner sur la surface CustomPaint
  6. class CustomView extends CustomPainter{ @override void paint(Canvas canvas, Size size)

    { // TODO: implement paint } @override bool shouldRepaint(CustomPainter oldDelegate) { // TODO: implement shouldRepaint throw UnimplementedError(); } } CustomPaint
  7. class CustomView extends CustomPainter{ @override void paint(Canvas canvas, Size size)

    { // TODO: implement paint } @override bool shouldRepaint(CustomPainter oldDelegate) { // TODO: implement shouldRepaint throw UnimplementedError(); } } • paint(..) : Permet le dessin sur la surface • shouldRepaint(...) : Appelé lorsqu’un nouvelle instance du CustomPainter est fournie CustomPaint
  8. paint(Canvas canvas, Size size) • Canvas : La surface dessinable

    • Size : La taille de la surface (définie par le parent/enfant) CustomPaint
  9. Canvas • draw...(..) : Permet de dessiner des éléments sur

    la surface (forme, texte, image…) • Paint : Définir le style de l'élément à dessiner CustomPaint
  10. Paint : Quelques attributs • color : couleur de remplissage/bordure

    de la forme • style : style du dessin (fill ou stroke) • strokeWidth : largeur de la bordure ... https://api.flutter.dev/flutter/dart-ui/Paint-class.html CustomPaint
  11. Paint p = Paint() ..color = Colors.blue ..style = PaintingStyle.stroke

    ..strokeWidth = 5; Paint p = Paint() ..color = Colors.orange ..style = PaintingStyle.fill ..strokeWidth = 5; CustomPaint
  12. class CustomView extends CustomPainter { … @override void paint(Canvas canvas,

    Size size) { double w = size.width; double h = size.height; double r = 60; canvas.drawCircle(Offset(w / 2, h / 2), r, p); } @override bool shouldRepaint(CustomPainter oldDelegate) => true; } CustomPaint
  13. class HomePage extends StatelessWidget { @override Widget build(BuildContext context) {

    double w = MediaQuery.of(context).size.width; double h = MediaQuery.of(context).size.height; return Scaffold( body: Container( width: w, height: h, child: CustomPaint( painter: CustomView(), ), ), ); } } CustomPaint