calculateDataSetsPosition method

  1. @visibleForTesting
List<RadarDataSetsPosition> calculateDataSetsPosition(
  1. Size viewSize,
  2. PaintHolder<RadarChartData> holder
)

Implementation

@visibleForTesting
List<RadarDataSetsPosition> calculateDataSetsPosition(
  Size viewSize,
  PaintHolder<RadarChartData> holder,
) {
  final data = holder.data;
  final centerX = radarCenterX(viewSize);
  final centerY = radarCenterY(viewSize);
  final radius = radarRadius(viewSize);

  final maxValue = data.maxEntry.value;
  final scale = maxValue == 0 ? 0 : radius / maxValue;

  final angle = (2 * pi) / data.titleCount;

  final dataSetsPosition = List<RadarDataSetsPosition>.filled(
    data.dataSets.length,
    const RadarDataSetsPosition([]),
  );
  for (var i = 0; i < data.dataSets.length; i++) {
    final dataSet = data.dataSets[i];
    final entriesOffset =
        List<Offset>.filled(dataSet.dataEntries.length, Offset.zero);

    for (var j = 0; j < dataSet.dataEntries.length; j++) {
      final point = dataSet.dataEntries[j];

      final xAngle = cos(angle * j - pi / 2);
      final yAngle = sin(angle * j - pi / 2);
      final scaledPoint = scale * point.value;

      final entryOffset = Offset(
        centerX + scaledPoint * xAngle,
        centerY + scaledPoint * yAngle,
      );

      entriesOffset[j] = entryOffset;
    }
    dataSetsPosition[i] = RadarDataSetsPosition(entriesOffset);
  }

  return dataSetsPosition;
}