renderData method

  1. @override
void renderData(
  1. Canvas canvas,
  2. ChartTransform transform,
  3. BarData barData
)
override

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