getBadgeOffsets method
Exposes offset for laying out the badge widgets upon the chart.
Implementation
Map<int, Offset> getBadgeOffsets(
Size viewSize,
PaintHolder<PieChartData> holder,
) {
final data = holder.data;
final center = viewSize.center(Offset.zero);
final badgeWidgetsOffsets = <int, Offset>{};
if (data.sections.isEmpty) {
return badgeWidgetsOffsets;
}
var tempAngle = data.startDegreeOffset;
final sectionsAngle = calculateSectionsAngle(data.sections, data.sumValue);
for (var i = 0; i < data.sections.length; i++) {
final section = data.sections[i];
final startAngle = tempAngle;
final sweepAngle = sectionsAngle[i];
final sectionCenterAngle = startAngle + (sweepAngle / 2);
final centerRadius = calculateCenterRadius(viewSize, holder);
Offset sectionCenter(double percentageOffset) =>
center +
Offset(
math.cos(Utils().radians(sectionCenterAngle)) *
(centerRadius + (section.radius * percentageOffset)),
math.sin(Utils().radians(sectionCenterAngle)) *
(centerRadius + (section.radius * percentageOffset)),
);
final sectionCenterOffsetBadgeWidget =
sectionCenter(section.badgePositionPercentageOffset);
badgeWidgetsOffsets[i] = sectionCenterOffsetBadgeWidget;
tempAngle += sweepAngle;
}
return badgeWidgetsOffsets;
}