drawOutSide method

void drawOutSide(
  1. Canvas canvas,
  2. double radius1,
  3. Size size,
  4. String text,
  5. int startDay,
  6. int endDay,
  7. Color color, {
  8. Offset? offset,
  9. bool adjust = true,
})

Draw Phase text outside circle like Menstruation, Ovulation etc

Implementation

void drawOutSide(Canvas canvas, double radius1, Size size, String text,
    int startDay, int endDay, Color color,
    {Offset? offset, bool adjust = true}) {
  final startAngle = (2 * pi / totalCycleDays) * startDay - pi / 2;
  final sweepAngle = (2 * pi / totalCycleDays) * (endDay - startDay);

  double radius =
      radius1 + outsideTextSpaceFromArc; // Adjust space btn arc and text
  double angle = startAngle;

  if (adjust) {
    angle += sweepAngle / 2 -
        (text.length *
            5 *
            pi /
            600); // Adjust starting angle for centering text
  }

  for (int i = 0; i < text.length; i++) {
    final char = text[i];

    double charAngle = angle +
        i * outsideTextCharSpace * pi / 180; // Adjust character spacing
    Offset charOffset = Offset(
      size.width / 2 + radius * cos(charAngle),
      size.height / 2 + radius * sin(charAngle),
    );

    TextPainter textPainter = TextPainter(
      text: TextSpan(
        text: char,
        style: TextStyle(
          color: color,
          fontSize: outsidePhasesTextSize,
        ),
      ),
      textAlign: TextAlign.center,
      textDirection: TextDirection.ltr,
    );

    textPainter.layout();
    canvas.save();
    canvas.translate(charOffset.dx, charOffset.dy);
    canvas.rotate(charAngle + pi / 2);
    textPainter.paint(
        canvas, Offset(-textPainter.width / 2, -textPainter.height / 2));
    canvas.restore();
  }
}