circleCanvasWithText static method

Future<BitmapDescriptor> circleCanvasWithText({
  1. required Size size,
  2. required String text,
  3. double fontSize = 15.0,
  4. Color circleColor = Colors.red,
  5. Color fontColor = Colors.black,
  6. FontWeight fontWeight = FontWeight.w500,
})

Implementation

static Future<BitmapDescriptor> circleCanvasWithText({
  required Size size,
  required String text,
  double fontSize = 15.0,
  Color circleColor = Colors.red,
  Color fontColor = Colors.black,
  FontWeight fontWeight = FontWeight.w500,
}) async {
  final ui.PictureRecorder pictureRecorder = ui.PictureRecorder();
  final Canvas canvas = Canvas(pictureRecorder);
  final Paint paint = Paint()..color = circleColor;
  final Radius radius = Radius.circular(size.width / 2);

  canvas.drawRRect(
      RRect.fromRectAndCorners(
        Rect.fromLTWH(0.0, 0.0, size.width.toDouble(), size.height.toDouble()),
        topLeft: radius,
        topRight: radius,
        bottomLeft: radius,
        bottomRight: radius,
      ),
      paint);

  TextPainter painter = TextPainter(textDirection: TextDirection.ltr);
  painter.text = TextSpan(
    text: text,
    style: TextStyle(fontSize: fontSize, color: fontColor, fontWeight: fontWeight),
  );

  painter.layout();
  painter.paint(canvas, Offset((size.width * 0.5) - painter.width * 0.5, (size.height * .5) - painter.height * 0.5));

  final img = await pictureRecorder.endRecording().toImage(size.width.toInt(), size.height.toInt());
  final data = await img.toByteData(format: ui.ImageByteFormat.png);

  return BitmapDescriptor.fromBytes(data!.buffer.asUint8List());
}