createUserMarker static method

Future<Marker> createUserMarker({
  1. required double dimension,
  2. required LatLng latLng,
  3. Color? defaultUserMarkerColor,
  4. BitmapDescriptor? customUserMarker,
})

Implementation

static Future<Marker> createUserMarker({
  required double dimension,
  required LatLng latLng,
  Color? defaultUserMarkerColor,
  BitmapDescriptor? customUserMarker,
}) async {
  BitmapDescriptor? icon;
  if (customUserMarker == null) {
    final defaultColor = defaultUserMarkerColor ?? ColorName.blue;
    final pictureRecorder = PictureRecorder();
    final canvas = Canvas(pictureRecorder);
    final largeCircle = Paint()
      ..style = PaintingStyle.fill
      ..color = defaultColor.withOpacity(0.2);
    final middleLargeCircle = Paint()
      ..style = PaintingStyle.fill
      ..color = defaultColor.withOpacity(0.4);
    final smallCircle = Paint()
      ..style = PaintingStyle.fill
      ..color = defaultColor;
    final whiteCircle = Paint()
      ..style = PaintingStyle.fill
      ..color = ColorName.white;
    final radius = dimension * 0.5;
    canvas
      ..drawCircle(Offset(radius, radius), radius, largeCircle)
      ..drawCircle(Offset(radius, radius), radius * 0.75, middleLargeCircle)
      ..drawCircle(Offset(radius, radius), radius * 0.5, smallCircle)
      ..drawCircle(Offset(radius, radius), radius * 0.20, whiteCircle);

    final image = await pictureRecorder.endRecording().toImage(
          dimension.toInt(),
          dimension.toInt(),
        );
    final data = await image.toByteData(format: ImageByteFormat.png);
    icon = BitmapDescriptor.fromBytes(data!.buffer.asUint8List());
  } else {
    icon = customUserMarker;
  }
  return Marker(
    markerId: _userMarkerId,
    position: latLng,
    icon: icon,
  );
}