pictureAssetWithCenterText static method

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

Implementation

static Future<BitmapDescriptor> pictureAssetWithCenterText(
    {required String assetPath,
    required String text,
    required Size size,
    double fontSize = 15,
    Color fontColor = Colors.black,
    FontWeight fontWeight = FontWeight.w500}) async {
  ByteData imageFile = await rootBundle.load(assetPath);
  final ui.PictureRecorder pictureRecorder = ui.PictureRecorder();
  final Canvas canvas = Canvas(pictureRecorder);
  final Path clipPath = Path();
  final Radius radius = Radius.circular(size.width / 2);
  clipPath.addRRect(
    RRect.fromRectAndCorners(
      Rect.fromLTWH(0.0, 0.0, size.width.toDouble(), size.height.toDouble()),
      topLeft: radius,
      topRight: radius,
      bottomLeft: radius,
      bottomRight: radius,
    ),
  );
  TextPainter painter = TextPainter(textDirection: TextDirection.ltr);
  painter.text = TextSpan(
    text: text,
    style: TextStyle(
        fontSize: fontSize, color: fontColor, fontWeight: fontWeight),
  );

  canvas.clipPath(clipPath);
  final Uint8List imageUint8List = imageFile.buffer.asUint8List();
  final ui.Codec codec = await ui.instantiateImageCodec(imageUint8List);
  final ui.FrameInfo imageFI = await codec.getNextFrame();

  paintImage(
      fit: BoxFit.contain,
      alignment: Alignment.center,
      canvas: canvas,
      rect:
          Rect.fromLTWH(0, 0, size.width.toDouble(), size.height.toDouble()),
      image: imageFI.image);
  painter.layout();
  painter.paint(
      canvas,
      Offset((size.width * 0.5) - painter.width * 0.5,
          (size.height * .5) - painter.height * 0.5));

  final _image = await pictureRecorder
      .endRecording()
      .toImage(size.width.toInt(), (size.height).toInt());
  final data = await _image.toByteData(format: ui.ImageByteFormat.png);
  return BitmapDescriptor.fromBytes(data!.buffer.asUint8List());
}