paint method
void
paint(
- BuildContext context,
- CanvasWrapper canvasWrapper,
- PaintHolder<
LineChartData> holder
override
Paints LineChartData into the provided canvas.
Implementation
@override
void paint(
BuildContext context,
CanvasWrapper canvasWrapper,
PaintHolder<LineChartData> holder,
) {
final data = holder.data;
if (data.lineBarsData.isEmpty) {
return;
}
if (data.clipData.any) {
canvasWrapper.saveLayer(
Rect.fromLTWH(
0,
-40,
canvasWrapper.size.width + 40,
canvasWrapper.size.height + 40,
),
Paint(),
);
clipToBorder(canvasWrapper, holder);
}
super.paint(context, canvasWrapper, holder);
for (final betweenBarsData in data.betweenBarsData) {
drawBetweenBarsArea(canvasWrapper, data, betweenBarsData, holder);
}
if (!data.extraLinesData.extraLinesOnTop) {
super.drawExtraLines(context, canvasWrapper, holder);
}
final lineIndexDrawingInfo = <LineIndexDrawingInfo>[];
/// draw each line independently on the chart
for (var i = 0; i < data.lineBarsData.length; i++) {
final barData = data.lineBarsData[i];
if (!barData.show) {
continue;
}
drawBarLine(canvasWrapper, barData, holder);
drawDots(canvasWrapper, barData, holder);
if (data.extraLinesData.extraLinesOnTop) {
super.drawExtraLines(context, canvasWrapper, holder);
}
final indicatorsData = data.lineTouchData
.getTouchedSpotIndicator(barData, barData.showingIndicators);
if (indicatorsData.length != barData.showingIndicators.length) {
throw Exception(
'indicatorsData and touchedSpotOffsets size should be same',
);
}
for (var j = 0; j < barData.showingIndicators.length; j++) {
final indicatorData = indicatorsData[j];
final index = barData.showingIndicators[j];
if (index < 0 || index >= barData.spots.length) {
continue;
}
final spot = barData.spots[index];
if (indicatorData == null) {
continue;
}
lineIndexDrawingInfo.add(
LineIndexDrawingInfo(barData, i, spot, index, indicatorData),
);
}
}
drawTouchedSpotsIndicator(canvasWrapper, lineIndexDrawingInfo, holder);
if (data.clipData.any) {
canvasWrapper.restore();
}
// Draw touch tooltip on most top spot
for (var i = 0; i < data.showingTooltipIndicators.length; i++) {
var tooltipSpots = data.showingTooltipIndicators[i];
final showingBarSpots = tooltipSpots.showingSpots;
if (showingBarSpots.isEmpty) {
continue;
}
final barSpots = List<LineBarSpot>.of(showingBarSpots);
AFlSpot topSpot = barSpots[0];
for (final barSpot in barSpots) {
if (barSpot.y > topSpot.y) {
topSpot = barSpot;
}
}
tooltipSpots = ShowingTooltipIndicators(barSpots);
drawTouchTooltip(
context,
canvasWrapper,
data.lineTouchData.touchTooltipData,
topSpot,
tooltipSpots,
holder,
);
}
}