import 'package:flutter/material.dart';
class DonutChartPainter extends CustomPainter {
final double outerRadius;
final double innerRadius;
final List<double> values;
final List<Color> colors;
DonutChartPainter({
required this.outerRadius,
required this.innerRadius,
required this.values,
required this.colors,
});
double radians(double degrees) {
return degrees * (3.14159265359 / 180.0);
}
@override
void paint(Canvas canvas, Size size) {
final double centerX = size.width / 2;
final double centerY = size.height / 2;
final double radius = outerRadius;
double startAngle = 0;
double totalValue = values.reduce((a, b) => a + b);
for (int i = 0; i < values.length; i++) {
final paint = Paint()
..color = colors[i]
..style = PaintingStyle.fill;
final sweepAngle = (values[i] / totalValue) * 360;
canvas.drawArc(
Rect.fromCircle(center: Offset(centerX, centerY), radius: radius),
radians(startAngle),
radians(sweepAngle),
true,
paint,
);
startAngle += sweepAngle;
}
final innerCirclePaint = Paint()
..color = Colors.white
..style = PaintingStyle.fill;
canvas.drawCircle(Offset(centerX, centerY), innerRadius, innerCirclePaint);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return false;
}
}