draw method

  1. @override
void draw(
  1. Canvas canvas,
  2. Size size,
  3. ChartContext context
)
override

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