getBadgeOffsets method

Map<int, Offset> getBadgeOffsets(
  1. Size viewSize,
  2. PaintHolder<PieChartData> holder
)

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;
}