button_painter.dart 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. import 'dart:ui';
  2. import 'package:battle/button/button_controller.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:widget/widget.dart';
  5. class ButtonPainter extends CustomPainter {
  6. final GameController controller;
  7. ButtonPainter({required this.controller}) : super(repaint: controller);
  8. @override
  9. void paint(Canvas canvas, Size size) {
  10. final paint = Paint()
  11. ..style = PaintingStyle.fill
  12. ..strokeWidth = 4;
  13. for (var button in controller.buttonList) {
  14. var path = fromBottomToCenter(size, button.startIndex, button.endIndex);
  15. var pms = path.computeMetrics();
  16. for (var pm in pms) {
  17. Tangent? tangent = pm.getTangentForOffset(pm.length * button.process);
  18. if (tangent == null) continue;
  19. paint.color = button.color;
  20. canvas.drawCircle(tangent.position, getButtonSize(size) / 2, paint);
  21. paint.color = button.color.withOpacity(0.2);
  22. canvas.drawCircle(tangent.position, getButtonSize(size) / 2 + getButtonSize(size) * 0.1, paint);
  23. }
  24. }
  25. }
  26. @override
  27. bool shouldRepaint(covariant CustomPainter oldDelegate) => true;
  28. }