[flutter] - google map 커스텀 마커


Google Map에서 마커 생성과 이동은 이전에 해결하였다.

이제는 구글 기본 마커가 아닌 이미지를 대체하여 커스텀 마커를 만들어보자.

아주 간단하다.

1. 이미지 준비

먼저 마커로 쓸 이미지를 준비하고 pubsepc.yaml에 준비해주자

flutter:

  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true

  # To add assets to your application, add an assets section, like this:
  assets:
    - assets/img/

나는 assets/img/marker.png 에 등록해놓았다.

2. 커스텀 마커 등록

구글맵 코드에 아래 코드를 추가하자.

class _GoogleMapBodyState extends State<GoogleMapBody> {
	List<Marker> _markers = [];
	Uint8List markerIcon;

  @override
  void initState() {
    super.initState();
    setCustomMapPin();
  }

  void setCustomMapPin() async {
    markerIcon = await getBytesFromAsset('assets/img/marker.png', 130);
  }

	Future<Uint8List> getBytesFromAsset(String path, int width) async {
    ByteData data = await rootBundle.load(path);
    ui.Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List(),
        targetWidth: width);
    ui.FrameInfo fi = await codec.getNextFrame();
    return (await fi.image.toByteData(format: ui.ImageByteFormat.png))
        .buffer
        .asUint8List();
  }

...

}

getBytesFromAsset의 width로 사이즈를 조절할 수 있다.

이제 마커를 등록해주는 코드에 icon을 연결해주자.

Marker(markerId: MarkerId(element.id),
			draggable: false,
			icon: BitmapDescriptor.fromBytes(markerIcon),
			position: element.latLng)

그리고 실행해보면 내가 수정한 이미지로 구글맵에 마커가 등록되는걸 확인 할 수 있다.