drawAxisTick method

  1. @override
void drawAxisTick(
  1. Canvas canvas,
  2. Paint paint
)
override

Implementation

@override
void drawAxisTick(Canvas canvas, Paint paint) {
  List<String> ticks = obtainTicks();
  if (ticks.isEmpty) {
    return;
  }
  if (ticks.length == 1) {
    dynamic firstData = scale.domainValue(axis.offsetAngle);
    dynamic endData = scale.domainValue(axis.offsetAngle + axis.sweepAngle);
    MainTick? tick;
    if (axis.axisLine.tickFun != null) {
      tick = axis.axisLine.tickFun!.call(DynamicData(firstData), DynamicData(endData), null);
    }
    tick ??= axis.axisLine.tick;
    tick?.drawCircleTick(canvas, paint, props.radius, axis.offsetAngle, axis.sweepAngle, ticks);
    return;
  }

  num allAngle = axis.sweepAngle.abs();
  num angleInterval = allAngle / (ticks.length - 1);
  for (int i = 0; i < ticks.length - 1; i++) {
    num startAngle = axis.offsetAngle + angleInterval * i;
    dynamic firstData = scale.domainValue(startAngle);
    dynamic endData = scale.domainValue(startAngle + angleInterval);
    MainTick? tick;
    if (axis.axisLine.tickFun != null) {
      tick = axis.axisLine.tickFun!.call(DynamicData(firstData), DynamicData(endData), null);
    }
    tick ??= axis.axisLine.tick;
    List<String> tl = [];
    tl.add(ticks[i]);
    if (i < ticks.length - 2) {
      tl.add('');
    } else {
      tl.add(ticks[i + 1]);
    }
    tick?.drawCircleTick(canvas, paint, props.radius, startAngle, angleInterval, tl, category: axis.category);
  }

  if (axis.subAxisStyle != null) {
    int length = ticks.length;
    num interval = axis.sweepAngle.abs() / length;
    if (!axis.clockwise) {
      interval *= -1;
    }

    int count = length;
    if (axis.sweepAngle % 360 != 0 && axis.sweepAngle > 0) {
      count += 1;
    }

    for (int i = 0; i < count; i++) {
      num angle = axis.offsetAngle + i * interval;
      Offset offset = circlePoint(props.radius, angle);
      axis.subAxisStyle!.drawPolygon(canvas, paint, [Offset.zero, offset]);
    }
  }
}