draw method
Implementation
@override
void draw(Canvas canvas, ChartsState state) {
ChartDimensionCoordinateState layout = state.layout as ChartDimensionCoordinateState;
List<ChartItemLayoutState> childrenLayoutState = [];
List<ChartItemLayoutState>? lastDataList = getLastData(state.animal && layout.controlValue < 1);
for (int index = 0; index < data.length; index++) {
T item = data[index];
num xValue = position.call(item);
num yValue = value.call(item);
//是否有补间动画
if (state.animal && layout.controlValue < 1) {
num? lastYValue;
num? lastXValue;
if (lastDataList != null && index < lastDataList.length) {
ChartItemLayoutState p = lastDataList[index];
lastYValue = p.yValue;
lastXValue = p.xValue;
}
if (lastXValue != null) {
xValue = ui.lerpDouble(lastXValue, xValue, layout.controlValue) ?? xValue;
}
yValue = ui.lerpDouble(lastYValue, yValue, layout.controlValue) ?? yValue;
}
ChartItemLayoutState p = _measureBarLayout(layout, xValue, yValue)..index = index;
if (p.originRect != null) {
if (chartState.selectedIndex == index) {
_paint.shader = null;
_paint.color = _paintBarColor(index: index, selected: true);
} else {
if (shader != null) {
_paint.shader = shader;
} else {
_paint.color = _paintBarColor(index: index, selected: false);
}
}
//开始绘制,bar不同于line,在循环中就可以绘制
canvas.drawRect(p.originRect!, _paint);
//绘制文本
if (layout.controlValue == 1) {
_drawText(canvas, layout, item, p);
}
}
childrenLayoutState.add(p);
}
chartState.children = childrenLayoutState;
}