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;

  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,
        context.paintCache.fill(
          'line-fill-$s',
          (series.style.fillColor ?? color).withValues(alpha: 0.2),
        ),
      );
    }

    canvas.drawPath(
      path,
      context.paintCache.get(
        key: 'line-$s',
        color: color.withValues(alpha: series.style.opacity),
        strokeWidth: series.style.strokeWidth,
      ),
    );

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

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