transformValues method

  1. @override
void transformValues()
override

Transforms the x and y values to screen coordinates.

Implementation

@override
void transformValues() {
  fillPath.reset();

  double startAngle;
  double endAngle;
  double degree;
  double outerRadius;

  if (_priorEndAngle.isNaN) {
    final int seriesStartAngle = series.startAngle - 90;
    degree = _degree * animationFactor;
    outerRadius = _outerRadius * animationFactor;
    startAngle = lerpDouble(seriesStartAngle, _startAngle, animationFactor)!;
    endAngle = startAngle + degree;
  } else {
    startAngle = lerpDouble(_priorStartAngle, _startAngle, animationFactor)!;
    endAngle = lerpDouble(_priorEndAngle, _endAngle, animationFactor)!;
    degree = endAngle - startAngle;
    outerRadius = _outerRadius;
  }

  // If the startAngle and endAngle value is same, then degree will be 0.
  // Hence no need to render segments.
  if (!isVisible && degree == 0) {
    return;
  }

  if (series.explode && _isExploded) {
    final double midAngle = (_startAngle + _endAngle) / 2;
    _center = calculateExplodingCenter(
        midAngle, _outerRadius, series.center, series.explodeOffset);
  } else {
    _center = series.center;
  }

  fillPath = calculateArcPath(
      _innerRadius, outerRadius, _center, startAngle, endAngle, degree,
      isAnimate: true);
}