import 'dart:math' as Math; import 'package:flutter/material.dart'; import 'package:flutter_circular_chart/src/animated_circular_chart.dart'; import 'package:flutter_circular_chart/src/circular_chart.dart'; import 'package:flutter_circular_chart/src/stack.dart'; class AnimatedCircularChartPainter extends CustomPainter { AnimatedCircularChartPainter(this.animation) : super(repaint: animation); final Animation animation; @override void paint(Canvas canvas, Size size) { _paintChart(canvas, size, animation.value); } @override bool shouldRepaint(AnimatedCircularChartPainter old) => false; } class CircularChartPainter extends CustomPainter { CircularChartPainter(this.chart); final CircularChart chart; @override void paint(Canvas canvas, Size size) { _paintChart(canvas, size, chart); } @override bool shouldRepaint(CircularChartPainter old) => false; } const double _kRadiansPerDegree = Math.PI / 180; void _paintChart(Canvas canvas, Size size, CircularChart chart) { final Paint segmentPaint = new Paint() ..style = chart.chartType == CircularChartType.Radial ? PaintingStyle.stroke : PaintingStyle.fill; for (final CircularChartStack stack in chart.stacks) { for (final segment in stack.segments) { segmentPaint.color = segment.color; segmentPaint.strokeWidth = stack.width; canvas.drawArc( new Rect.fromCircle( center: new Offset(size.width / 2, size.height / 2), radius: stack.radius, ), stack.startAngle * _kRadiansPerDegree, segment.sweepAngle * _kRadiansPerDegree, chart.chartType == CircularChartType.Pie, segmentPaint, ); } } }