drawInsideText method

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

Implementation

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

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

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

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

    double charAngle = angle + i * 5 * 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: (i == 0) ? "$char " : char,
        style: TextStyle(
            color: Colors.white,
            fontSize: (startDay == currentMonth) ? 10 : 7,
            fontFamily: getFontFamily(),
            fontWeight: (startDay == currentMonth)
                ? FontWeight.bold
                : FontWeight.normal,
            letterSpacing: 1),
      ),
      textDirection:
          (isArabicLanguage()) ? TextDirection.rtl : 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();
  }
}