drawAxisTick method

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

Implementation

@override
void drawAxisTick(Canvas canvas, Paint paint) {
  if (axis.axisLine.tick == null) {
    return;
  }
  List<String> ticks = obtainTicks();
  if (ticks.isEmpty) {
    return;
  }
  if (ticks.length == 1) {
    return;
  }

  List<num> viewPortList = viewRange; //distance
  num first = viewPortList[0];
  num end = viewPortList[1];
  num allDistance = (scale.range[0] - scale.range[1]).abs();
  num viewInterval = allDistance / ticks.length;
  if (!axis.category) {
    viewInterval = allDistance / (ticks.length - 1);
  }
  int count = (end - first) ~/ viewInterval;

  for (int i = 0; i < count; i += 1) {
    num pre = first + i * viewInterval;
    num next = first + (i + 1) * viewInterval;
    int firstIndex = pre ~/ viewInterval;
    int nextIndex = next ~/ viewInterval;
    Offset startOffset, endOffset;
    double percent = pre / allDistance;
    startOffset = Offset(
      props.start.dx + (props.end.dx - props.start.dx) * percent,
      props.start.dy + (props.end.dy - props.start.dy) * percent,
    );
    startOffset = startOffset.translate(-scrollValue, -scrollValue);
    percent = next / allDistance;
    endOffset = Offset(
      props.start.dx + (props.end.dx - props.start.dx) * percent,
      props.start.dy + (props.end.dy - props.start.dy) * percent,
    );

    endOffset = endOffset.translate(-scrollValue, -scrollValue);
    MainTick? tick;
    if (axis.axisLine.tickFun != null) {
      dynamic firstData = scale.domainValue(pre);
      dynamic endData = scale.domainValue(next);
      tick = axis.axisLine.tickFun!.call(DynamicData(firstData), DynamicData(endData), null);
    }
    tick ??= axis.axisLine.tick;
    List<String> subList = [];
    if (axis.category) {
      subList.add(ticks[firstIndex]);
    } else {
      subList.add(ticks[firstIndex]);
      subList.add(ticks[nextIndex]);
    }
    tick?.drawLineTick(canvas, paint, startOffset, endOffset, subList);
  }
}