createClusterMarker static method

Future<Uint8List> createClusterMarker({
  1. required BuildContext context,
  2. required double dimension,
  3. required int clusterCount,
  4. required Color markerColor,
})

Implementation

static Future<Uint8List> createClusterMarker({
  required BuildContext context,
  required double dimension,
  required int clusterCount,
  required Color markerColor,
}) async {
  final devicePixelRatio = View.of(context).devicePixelRatio;
  final pictureRecorder = PictureRecorder();
  final canvas = Canvas(pictureRecorder);
  final paint = Paint()
    ..style = PaintingStyle.fill
    ..color = markerColor;
  final radius = dimension * 0.5;
  canvas.drawCircle(Offset(radius, radius), radius, paint);
  final remainderOfDivision = clusterCount % _multipleOfMarkers;
  final clusterText = remainderOfDivision > 0 && clusterCount > _multipleOfMarkers
      ? '${clusterCount - remainderOfDivision}+'
      : '$clusterCount';
  final textPainter = TextPainter(textDirection: TextDirection.ltr)
    ..text = TextSpan(
      text: clusterText,
      style: TextStyle(
        color: ColorName.white,
        fontWeight: FontWeight.w600,
        fontSize: 12 * devicePixelRatio,
      ),
    )
    ..layout();
  textPainter.paint(
    canvas,
    Offset(
      (dimension - textPainter.width) / 2,
      (dimension - textPainter.height) / 2,
    ),
  );

  final image = await pictureRecorder.endRecording().toImage(
        dimension.toInt(),
        dimension.toInt(),
      );
  final data = await image.toByteData(format: ImageByteFormat.png);
  return data!.buffer.asUint8List();
}