import 'package:flutter/material.dart';
void main() => runApp(MyPaint());
class MyPaint extends StatefulWidget {
const MyPaint({Key? key}) : super(key: key);
@override
_MyPaintState createState() => _MyPaintState();
}
class _MyPaintState extends State<MyPaint> {
ValueNotifier<double> _vn = ValueNotifier<double>(0);
@override
Widget build(BuildContext context) {
return GestureDetector(
onPanUpdate: parse,
child: CustomPaint(
painter: BoxPainter(vn: _vn),
),
);
}
dynamic parse(DragUpdateDetails details) {
_vn.value = details.globalPosition.dy;
}
}
class BoxPainter extends CustomPainter {
ValueNotifier<double> vn;
BoxPainter({@required this.vn}) : super(repaint: vn);
@override
void paint(Canvas canvas, Size size) {
canvas.translate(size.width / 2, 0);
canvas.drawCircle(Offset(0, vn.value), 66, Paint()..color = Colors.blue);
}
@override
bool shouldRepaint(BoxPainter oldDelegate) => false;
@override
bool shouldRebuildSemantics(BoxPainter oldDelegate) => false;
}