效果
代码
import 'package:flutter/material.dart';class SignaturePainter extends CustomPainter { SignaturePainter(this.points); final List 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 { List _points = []; Widget build(BuildContext context) { return new Stack( children: [ GestureDetector( onPanUpdate: (DragUpdateDetails details) { RenderBox referenceBox = context.findRenderObject(); Offset localPosition = referenceBox.globalToLocal(details.globalPosition); setState(() { _points = new List.from(_points)..add(localPosition); }); }, onPanEnd: (DragEndDetails details) => _points.add(null), ), 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()));复制代码