import 'package:flutter/animation.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_circular_chart/src/animated_circular_chart.dart'; import 'package:flutter_circular_chart/src/entry.dart'; import 'package:flutter_circular_chart/src/stack.dart'; import 'package:flutter_circular_chart/src/tween.dart'; class CircularChart { static const double _kStackWidthFraction = 0.75; CircularChart(this.stacks, this.chartType); factory CircularChart.empty({@required CircularChartType chartType}) { return new CircularChart([], chartType); } final List stacks; final CircularChartType chartType; factory CircularChart.fromData({ @required Size size, @required List data, @required CircularChartType chartType, @required bool percentageValues, @required double startAngle, Map stackRanks, Map entryRanks, double holeRadius, }) { final double _holeRadius = holeRadius ?? size.width / (2 + data.length); final double stackDistance = (size.width / 2 - _holeRadius) / (2 + data.length); final double stackWidth = stackDistance * _kStackWidthFraction; final double startRadius = stackDistance + _holeRadius; List stacks = new List.generate( data.length, (i) => new CircularChartStack.fromData( stackRanks[data[i].rankKey] ?? i, data[i].entries, entryRanks, percentageValues, startRadius + i * stackDistance, stackWidth, startAngle, ), ); return new CircularChart(stacks, chartType); } } class CircularChartTween extends Tween { CircularChartTween(CircularChart begin, CircularChart end) : _stacksTween = new MergeTween(begin.stacks, end.stacks), super(begin: begin, end: end); final MergeTween _stacksTween; @override CircularChart lerp(double t) => new CircularChart(_stacksTween.lerp(t), begin.chartType); }