import 'package:flutter/material.dart'; class SignatureDrawBoard extends StatefulWidget { @override _SignatureDrawBoardState createState() => _SignatureDrawBoardState(); } class _SignatureDrawBoardState extends State { List points = []; @override Widget build(BuildContext context) { return GestureDetector( onPanUpdate: (DragUpdateDetails details) { setState(() { RenderBox renderBox = context.findRenderObject() as RenderBox; Offset localPosition = renderBox.globalToLocal(details.globalPosition); points = List.from(points)..add(localPosition); }); }, onPanEnd: (DragEndDetails details) { // points.add(Offset.zero); }, child: CustomPaint( painter: SignaturePainter( color: Colors.black, strokeWidth: 5.0, points: points, ), size: Size.infinite, ), ); } } class SignaturePainter extends CustomPainter { Color color; double strokeWidth; List points; SignaturePainter({required this.color, required this.strokeWidth, required this.points}); @override void paint(Canvas canvas, Size size) { Paint paint = Paint() ..color = color ..strokeWidth = strokeWidth ..strokeCap = StrokeCap.round; for (int i = 0; i < points.length - 1; i++) { canvas.drawLine(points[i], points[i + 1], paint); } } @override bool shouldRepaint(CustomPainter oldDelegate) { return true; } }