drawAxisTick method
void
drawAxisTick(
- Canvas canvas,
- 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);
}
}