spinToSegment method

void spinToSegment({
  1. required WheelSegment selectedSegment,
  2. required List<WheelSegment> segments,
})

Implementation

void spinToSegment({
  required WheelSegment selectedSegment,
  required List<WheelSegment> segments,
}) {
  // ========================================
  // VALIDATION
  // ========================================
  if (segments.isEmpty) {
    return;
  }

  // ========================================
  // CALCULATE TOTAL WEIGHT
  // ========================================
  final totalWeight = _calculateTotalWeight(segments);
  if (totalWeight <= 0.0) {
    return;
  }

  // ========================================
  // CALCULATE TARGET ANGLE
  // ========================================
  final targetAngle = _calculateTargetAngle(
    selectedSegment,
    segments,
    totalWeight,
  );

  // ========================================
  // ADD RANDOM OFFSET
  // ========================================
  final finalTargetAngle = _addRandomOffset(
    targetAngle,
    selectedSegment,
    totalWeight,
  );

  // ========================================
  // CALCULATE FINAL ANGLE WITH TURNS
  // ========================================
  final finalAngle = _calculateFinalAngle(finalTargetAngle);

  // ========================================
  // CREATE AND START ANIMATION
  // ========================================
  _createAndStartAnimation(finalAngle);
}