renderData method
Implementation
@override
void renderData(
Canvas canvas,
ChartTransform transform,
BarData barData,
) {
final paint = Paint();
for (final bar in barData.bars) {
final overrides = bar.thickness;
final thicknessSize = overrides?.size ?? barData.thickness.size;
final thicknessAlign = overrides?.align ?? barData.thickness.align;
final thicknessGradient = overrides?.gradient ?? barData.thickness.gradient;
final thicknessColor = overrides?.color ?? barData.thickness.color;
final barWidth = transform.scalar(thicknessSize);
final half = barWidth / 2;
final a = half * (1 + thicknessAlign);
final b = half * (1 - thicknessAlign);
// Bar axis in data space: (x, y) -> (x, fy); transform to screen
final p0 = transform.xy(bar.x, bar.y);
final p1 = transform.xy(bar.x, bar.fy);
// NB! Expecting to always have same x or y coordinates, so we can use usual rect
final rect = _screenRectFromAxis(p0, p1, barWidth, a, b);
RRect? roundedRect = this.roundedRect(transform, barData, rect);
paint.style = PaintingStyle.fill;
if (thicknessGradient != null) {
paint.shader = thicknessGradient.createShader(rect);
} else {
paint.shader = null;
paint.color = thicknessColor;
}
if (roundedRect != null) {
canvas.drawRRect(roundedRect, paint);
} else {
canvas.drawRect(rect, paint);
}
final border = barData.border;
if (border != null) {
final borderSize = transform.scalar(border.size);
final borderRect = rect.inflate(borderSize * border.align);
RRect? borderRoundedRect = this.roundedRect(transform, barData, borderRect);
paint.style = PaintingStyle.stroke;
paint.strokeWidth = borderSize;
if (border.gradient != null) {
paint.shader = border.gradient!.createShader(borderRect);
} else {
paint.shader = null;
paint.color = border.color;
}
if (borderRoundedRect != null) {
canvas.drawRRect(borderRoundedRect, paint);
} else {
canvas.drawRect(borderRect, paint);
}
}
}
drawDataPoints(canvas, paint, transform, barData, barData.bars);
}