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;

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

  // 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;
  }

  final CornerStyle cornerStyle = series.cornerStyle;
  if (cornerStyle == CornerStyle.bothFlat) {
    fillPath = calculateArcPath(
        _innerRadius, _outerRadius, _center, startAngle, endAngle, degree,
        isAnimate: true);
  } else {
    final num angleDeviation =
        findAngleDeviation(_innerRadius, _outerRadius, 360);
    final double actualStartAngle = (cornerStyle == CornerStyle.startCurve ||
            cornerStyle == CornerStyle.bothCurve)
        ? (startAngle + angleDeviation)
        : startAngle;
    final double actualEndAngle = (cornerStyle == CornerStyle.endCurve ||
            cornerStyle == CornerStyle.bothCurve)
        ? (endAngle - angleDeviation)
        : endAngle;

    fillPath = calculateRoundedCornerArcPath(cornerStyle, _innerRadius,
        _outerRadius, _center, actualStartAngle, actualEndAngle);
  }
}