drawTicks method

  1. @visibleForTesting
void drawTicks(
  1. BuildContext context,
  2. CanvasWrapper canvasWrapper,
  3. PaintHolder<RadarChartData> holder
)

Implementation

@visibleForTesting
void drawTicks(
  BuildContext context,
  CanvasWrapper canvasWrapper,
  PaintHolder<RadarChartData> holder,
) {
  final data = holder.data;
  final size = canvasWrapper.size;

  final centerX = radarCenterX(size);
  final centerY = radarCenterY(size);
  final centerOffset = Offset(centerX, centerY);

  /// controls Radar chart size
  final radius = radarRadius(size);

  _backgroundPaint.color = data.radarBackgroundColor;

  _borderPaint
    ..color = data.radarBorderData.color
    ..strokeWidth = data.radarBorderData.width;

  if (data.radarShape == RadarShape.circle) {
    /// draw radar background
    canvasWrapper
      ..drawCircle(centerOffset, radius, _backgroundPaint)

      /// draw radar border
      ..drawCircle(centerOffset, radius, _borderPaint);
  } else {
    final path =
        _generatePolygonPath(centerX, centerY, radius, data.titleCount);

    /// draw radar background
    canvasWrapper
      ..drawPath(path, _backgroundPaint)

      /// draw radar border
      ..drawPath(path, _borderPaint);
  }

  final dataSetMaxValue = data.maxEntry.value;
  final dataSetMinValue = data.minEntry.value;
  final tickSpace = (dataSetMaxValue - dataSetMinValue) / data.tickCount;
  final ticks = <double>[];
  var tickValue = dataSetMinValue;

  for (var i = 0; i <= data.tickCount; i++) {
    ticks.add(tickValue);
    tickValue += tickSpace;
  }

  final tickDistance = radius / (ticks.length);

  _tickPaint
    ..color = data.tickBorderData.color
    ..strokeWidth = data.tickBorderData.width;

  /// draw radar ticks
  ticks.sublist(0, ticks.length - 1).asMap().forEach(
    (index, tick) {
      final tickRadius = tickDistance * (index + 1);
      if (data.radarShape == RadarShape.circle) {
        canvasWrapper.drawCircle(centerOffset, tickRadius, _tickPaint);
      } else {
        canvasWrapper.drawPath(
          _generatePolygonPath(centerX, centerY, tickRadius, data.titleCount),
          _tickPaint,
        );
      }

      _ticksTextPaint
        ..text = TextSpan(
          text: tick.toStringAsFixed(1),
          style: Utils().getThemeAwareTextStyle(context, data.ticksTextStyle),
        )
        ..textDirection = TextDirection.ltr
        ..layout(maxWidth: size.width);
      canvasWrapper.drawText(
        _ticksTextPaint,
        Offset(centerX + 5, centerY - tickRadius - _ticksTextPaint.height),
      );
    },
  );
}