signature_draw_board_widget.dart 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import 'package:flutter/material.dart';
  2. class SignatureDrawBoard extends StatefulWidget {
  3. @override
  4. _SignatureDrawBoardState createState() => _SignatureDrawBoardState();
  5. }
  6. class _SignatureDrawBoardState extends State<SignatureDrawBoard> {
  7. List<Offset> points = [];
  8. @override
  9. Widget build(BuildContext context) {
  10. return GestureDetector(
  11. onPanUpdate: (DragUpdateDetails details) {
  12. setState(() {
  13. RenderBox renderBox = context.findRenderObject() as RenderBox;
  14. Offset localPosition = renderBox.globalToLocal(details.globalPosition);
  15. points = List.from(points)..add(localPosition);
  16. });
  17. },
  18. onPanEnd: (DragEndDetails details) {
  19. // points.add(Offset.zero);
  20. },
  21. child: CustomPaint(
  22. painter: SignaturePainter(
  23. color: Colors.black,
  24. strokeWidth: 5.0,
  25. points: points,
  26. ),
  27. size: Size.infinite,
  28. ),
  29. );
  30. }
  31. }
  32. class SignaturePainter extends CustomPainter {
  33. Color color;
  34. double strokeWidth;
  35. List<Offset> points;
  36. SignaturePainter({required this.color, required this.strokeWidth, required this.points});
  37. @override
  38. void paint(Canvas canvas, Size size) {
  39. Paint paint = Paint()
  40. ..color = color
  41. ..strokeWidth = strokeWidth
  42. ..strokeCap = StrokeCap.round;
  43. for (int i = 0; i < points.length - 1; i++) {
  44. canvas.drawLine(points[i], points[i + 1], paint);
  45. }
  46. }
  47. @override
  48. bool shouldRepaint(CustomPainter oldDelegate) {
  49. return true;
  50. }
  51. }