2017-09-15 21 views
-10

Je veux créer une zone de signature comme Here avec dart dans une application mobile!Créer `zone de signature» pour l'application mobile dans dart (flutter)

J'ai essayé d'utiliser la classe CustomPaint ... Mais cela ne fonctionne pas.

Quelqu'un peut-il m'aider?

+5

Nous décourageons les messages qui indiquent simplement un problème hors contexte, et attendent la communauté pour le résoudre. En supposant que vous avez essayé de le résoudre vous-même et que vous vous êtes coincé, il pourrait être utile que vous écriviez vos pensées et ce que vous ne pourriez pas comprendre. Ajoutez un [mcve] de votre code et décrivez les problèmes que vous rencontrez. _ "Mais ça ne marche pas" _ n'est pas très utile. – Cerbrus

+1

Votre programme [ne fonctionne pas] (http://importblogkit.com/2015/07/does-not-work/)? –

+0

L'électeur peut-il expliquer son vote? La réponse affichée ici semble plutôt utile .... – user000001

Répondre

14

Vous pouvez créer une zone de signature en utilisant GestureDetector pour enregistrer des touches et CustomPaint pour dessiner sur l'écran. Voici quelques conseils:

video

import 'package:flutter/material.dart'; 
class SignaturePainter extends CustomPainter { 
    SignaturePainter(this.points); 
    final List<Offset> points; 
    void paint(Canvas canvas, Size size) { 
    Paint paint = new Paint() 
     ..color = Colors.black 
     ..strokeCap = StrokeCap.round 
     ..strokeWidth = 5.0; 
    for (int i = 0; i < points.length - 1; i++) { 
     if (points[i] != null && points[i + 1] != null) 
     canvas.drawLine(points[i], points[i + 1], paint); 
    } 
    } 
    bool shouldRepaint(SignaturePainter other) => other.points != points; 
} 
class Signature extends StatefulWidget { 
    SignatureState createState() => new SignatureState(); 
} 
class SignatureState extends State<Signature> { 
    List<Offset> _points = <Offset>[]; 
    Widget build(BuildContext context) { 
    return new GestureDetector(
     onPanUpdate: (DragUpdateDetails details) { 
     setState(() { 
      RenderBox referenceBox = context.findRenderObject(); 
      Offset localPosition = 
      referenceBox.globalToLocal(details.globalPosition); 
      _points = new List.from(_points)..add(localPosition); 
     }); 
     }, 
     onPanEnd: (DragEndDetails details) => _points.add(null), 
     child: new CustomPaint(painter: new SignaturePainter(_points)), 
    ); 
    } 
} 
class DemoApp extends StatelessWidget { 
    Widget build(BuildContext context) => new Scaffold(body: new Signature()); 
} 
void main() => runApp(new MaterialApp(home: new DemoApp())); 
+0

Ce code ne semble plus fonctionner avec le canal bêta de flutter. J'ai essayé sur émulateur et sur un vrai périphérique (Pixel 2) mais rien ne dessine sur l'écran. – xrd