import 'package:flutter/material.dart'; /// A dashed rounded-rectangle outline: the target a bar is measured against. class DashedOutline extends CustomPainter { final Color color; final double radius; const DashedOutline({required this.color, this.radius = 10}); @override void paint(Canvas canvas, Size size) { if (size.height <= 0) { return; } final Paint paint = Paint() ..color = color ..style = PaintingStyle.stroke ..strokeWidth = 1.2; final Path outline = Path() ..addRRect( RRect.fromRectAndRadius(Offset.zero & size, Radius.circular(radius))); const double dash = 4; const double gap = 3; for (final metric in outline.computeMetrics()) { double distance = 0; while (distance < metric.length) { canvas.drawPath(metric.extractPath(distance, distance + dash), paint); distance = distance + dash + gap; } } } @override bool shouldRepaint(DashedOutline oldDelegate) => oldDelegate.color != color || oldDelegate.radius != radius; }