draw method

  1. @override
void draw(
  1. Canvas canvas,
  2. ChartsState state
)

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;
}