import 'dart:ui'; import 'package:battle/button/button_controller.dart'; import 'package:flutter/material.dart'; import 'package:widget/widget.dart'; class ButtonPainter extends CustomPainter { final ButtonController controller; ButtonPainter({required this.controller}) : super(repaint: controller); @override void paint(Canvas canvas, Size size) { final paint = Paint() ..style = PaintingStyle.fill ..strokeWidth = 4; for (var button in controller.startButton) { var path = fromBottomToCenter(size, button.startIndex, button.endIndex); var pms = path.computeMetrics(); for (var pm in pms) { Tangent? tangent = pm.getTangentForOffset(pm.length * button.process); if (tangent == null) continue; paint.color = button.color; canvas.drawCircle(tangent.position, getButtonSize(size) / 2, paint); } } } @override bool shouldRepaint(covariant CustomPainter oldDelegate) => true; }