paint method
Draw charts.
Implementation
@override
void paint(Canvas canvas, Size size) {
final ChartTouchCallbackData? currentTouchedData = touchedData;
_calculate(size);
ChartAxisValue xValue = const ChartAxisValue.empty();
ChartAxisValue yValue = const ChartAxisValue.empty();
final ChartLayer? axisLayer =
layers.firstWhereOrNull((element) => element is ChartAxisLayer);
final List<TouchableShape<ChartDataItem>> touchableShapes = [];
if (axisLayer is ChartAxisLayer) {
xValue = ChartAxisValue(
max: axisLayer.x.max,
min: axisLayer.x.min,
);
yValue = ChartAxisValue(
max: axisLayer.y.max,
min: axisLayer.y.min,
);
}
for (int i = 0; i < layers.length; i++) {
final ChartLayer layer = layers[i];
final ChartLayer? oldLayer = oldLayers?.getOrNull(i);
if (layer is ChartGridLayer) {
_ChartGridPainter.draw(
canvas: canvas,
controller: controller,
layer: layer,
oldLayer: oldLayer is ChartGridLayer ? oldLayer : null,
painterData: _sheetPainterData,
);
} else if (layer is ChartAxisLayer) {
_ChartAxisPainter.draw(
canvas: canvas,
controller: controller,
layer: layer,
oldLayer: oldLayer is ChartAxisLayer ? oldLayer : null,
painterDataAxisX: _axisXPainterData,
painterDataAxisY: _axisYPainterData,
);
} else if (layer is ChartBarLayer) {
_ChartBarPainter.draw(
canvas: canvas,
controller: controller,
layer: layer,
oldLayer: oldLayer is ChartBarLayer ? oldLayer : null,
painterData: _sheetPainterData,
touchableShapes: touchableShapes,
xValue: xValue,
yValue: yValue,
);
} else if (layer is ChartLineLayer) {
_ChartLinePainter.draw(
canvas: canvas,
controller: controller,
layer: layer,
oldLayer: oldLayer is ChartLineLayer ? oldLayer : null,
painterData: _sheetPainterData,
touchableShapes: touchableShapes,
xValue: xValue,
yValue: yValue,
);
} else if (layer is ChartGroupBarLayer) {
_ChartGroupBarPainter.draw(
canvas: canvas,
controller: controller,
layer: layer,
oldLayer: oldLayer is ChartGroupBarLayer ? oldLayer : null,
painterData: _sheetPainterData,
touchableShapes: touchableShapes,
xValue: xValue,
yValue: yValue,
);
} else if (layer is ChartGroupPieLayer) {
_ChartGroupPiePainter.draw(
canvas: canvas,
controller: controller,
layer: layer,
oldLayer: oldLayer is ChartGroupPieLayer ? oldLayer : null,
painterData: _sheetPainterData,
touchableShapes: touchableShapes,
);
} else if (layer is ChartCandleLayer) {
_ChartCandlePainter.draw(
canvas: canvas,
controller: controller,
layer: layer,
oldLayer: oldLayer is ChartCandleLayer ? oldLayer : null,
painterData: _sheetPainterData,
xValue: xValue,
yValue: yValue,
);
} else if (layer is ChartTooltipLayer && currentTouchedData != null) {
_ChartTooltipPainter.draw(
canvas: canvas,
layer: layer,
painterData: _sheetPainterData,
tolerance: _sheetPainterData.position.dx -
(_axisYPainterData.position.dx + _axisYPainterData.size.width),
touchedData: currentTouchedData,
);
} else if (layer is ChartHighlightLayer && currentTouchedData != null) {
_ChartHighlightPainter.draw(
canvas: canvas,
layer: layer,
painterData: _sheetPainterData,
tolerance: _sheetPainterData.position.dx -
(_axisYPainterData.position.dx + _axisYPainterData.size.width),
touchedData: currentTouchedData,
);
}
}
onUpdateTouchableShapes?.call(touchableShapes);
}