renderData method
Implementation
@override
void renderData(
Canvas canvas,
ChartTransform transform,
PieData pieData,
) {
final layouts = computePies(
pieData.pies,
pieData.pieOffset,
pieData.padAngle,
pieData.thickness,
pieData.borderRadius,
transform
);
final paint = Paint();
for (final layout in layouts) {
Path pie = layout.toPath();
pie = transform.path(pie);
paint.style = PaintingStyle.fill;
final thickness = pieData.thickness;
final thicknessGradient = layout.point.thickness?.gradient ?? thickness.gradient;
if (thicknessGradient != null) {
paint.shader = thicknessGradient.createShader(pie.getBounds());
} else {
paint.shader = null;
paint.color = layout.point.thickness?.color ?? thickness.color;
}
canvas.drawPath(pie, paint);
final border = layout.point.border?.border ?? pieData.border;
if (border != null) {
final borderSize = transform.scalar(border.size);
final borderLayout = PieSliceData(
offset: layout.offset,
innerRadius: max(0, layout.innerRadius - borderSize * border.align),
outerRadius: layout.outerRadius + borderSize * border.align,
startAngle: layout.startAngle,
endAngle: layout.endAngle,
point: layout.point,
cornerRadius: layout.cornerRadius,
padAngle: layout.padAngle
);
Path pieBorderPath = borderLayout.toPath();
paint.style = PaintingStyle.stroke;
paint.strokeWidth = borderSize;
if (border.gradient != null) {
paint.shader = border.gradient!.createShader(pieBorderPath.getBounds());
} else {
paint.shader = null;
paint.color = border.color;
}
canvas.drawPath(pieBorderPath, paint);
}
}
// Place each data point at the slice mid-angle on the circle, in Cartesian (x, y).
var midPoints = pieData.pies.map((point) {
final cart = toCartesian(point.x, point);
return point.copyWith(x: cart.dx, y: cart.dy, dy: 0.0);
}).toList();
drawDataPoints(canvas, paint, transform, pieData, midPoints);
}