pictureAssetWithCenterText static method
Future<BitmapDescriptor>
pictureAssetWithCenterText(
{ - required String assetPath,
- required String text,
- required Size size,
- double fontSize = 15,
- Color fontColor = Colors.black,
- 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());
}