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