draw method
Implementation
@override
void draw(Canvas canvas, Size size, ChartContext context) {
final series = context.config.series;
if (series.isEmpty) return;
final anim = context.animationValue;
final art = SeriesPaint(context.config.style);
final categories = _categories(series);
final barCount = series.length;
final groupWidth = context.bounds.width / math.max(categories.length, 1);
final barWidth = groupWidth / (barCount + 1);
for (var c = 0; c < categories.length; c++) {
var stackBase = context.viewport.minY;
for (var s = 0; s < series.length; s++) {
final ser = series[s];
final point = ser.points.where((p) => p.x == categories[c]).firstOrNull;
if (point == null) continue;
final color = ser.style.color ?? context.theme.seriesColor(s);
final value = point.y * anim;
final rect = _barRect(
context,
categoryIndex: c,
seriesIndex: s,
barCount: barCount,
barWidth: barWidth,
groupWidth: groupWidth,
value: value,
stackBase: stackBase,
);
if (layout == BarChartLayout.stacked) {
stackBase += value;
}
final selected =
context.selectedHit?.seriesId == ser.id &&
context.selectedHit?.pointIndex == c;
final paint = art.barFill(
rect,
color,
opacity: selected ? 0.78 : ser.style.opacity,
);
final baseY = context.transformer.dataToCanvasY(context.viewport.minY);
drawVerticalBar(
canvas,
rect,
radius: context.config.barBorderRadius,
paint: paint,
baseY: baseY,
);
}
}
}