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 bezier = BezierPathBuilder(tension: context.config.curveTension);
  final anim = context.animationValue;
  final art = SeriesPaint(context.config.style);

  for (var s = 0; s < context.config.series.length; s++) {
    final series = context.config.series[s];
    if (series.points.isEmpty) continue;

    final color = series.style.color ?? context.theme.seriesColor(s);
    final points = _animatedPoints(series.points, anim, context);

    final path = bezier.buildFromPoints(
      points,
      context.transformer,
      smooth: mode == LineChartMode.smooth,
    );

    if (fillArea && points.isNotEmpty) {
      final fillPath = Path.from(path);
      final first = context.transformer.dataToCanvas(
        points.first.x,
        points.first.y,
      );
      final last = context.transformer.dataToCanvas(
        points.last.x,
        points.last.y,
      );
      fillPath
        ..lineTo(last.dx, context.bounds.bottom)
        ..lineTo(first.dx, context.bounds.bottom)
        ..close();

      canvas.drawPath(
        fillPath,
        art.areaFill(
          context.bounds.rect,
          series.style.fillColor ?? color,
          opacity: series.style.opacity,
        ),
      );
    }

    // Soft glow beneath the stroke for depth (no-op in flat style).
    canvas.drawPath(
      path,
      art.glow(color, strokeWidth: series.style.strokeWidth + 4, blur: 5),
    );

    // Style-aware stroke (gradient / flat / glass).
    canvas.drawPath(
      path,
      art.stroke(
        context.bounds.rect,
        color,
        strokeWidth: series.style.strokeWidth,
        opacity: series.style.opacity,
      ),
    );

    if (series.style.showMarkers) {
      _drawMarkers(canvas, context, points, series, color, s);
    }

    _drawHover(canvas, context, series, points, color);
  }
}