Flutter 지도 - kakao_map_plugin

kkensu
조현철의 개발로그
6 min readDec 23, 2022

지난 번 포스팅에서 Flutter 에 카카오지도를 구현하는 방법에 대해 작성했었습니다. 네이티브 라이브러리를 사용하는 방법은 아니고, WebView 를 이용하여 구현 하는 방법이었습니다. 혹시 못 보신 분들은 아래 링크에서 확인해 보시면 됩니다!

지난 번 포스팅을 작성하면서 카카오 지도를 구현할 수 있는 적절한 라이브러리가 없는 것 같아서 직접 만들어서 배포하면 좋겠다고 생각이 들었습니다! 그래서~ 여러 우여곡절 끝에… 라이브러리를 배포하게 되었습니다~! 아래 링크에서 확인해보실 수 있습니다! 라이브러리가 좋다고 생각되시면 pub.dev 좋아요도 한번씩 눌러주시면 감사하겠습니다! 😁

오늘은 라이브러리를 만들면서 지난 번 글에 대한 추가 설명과 샘플에 대해 간단하게 설명을좀 하려고 합니다.

1. WebView 라이브러리

지난 번에는 webview_flutter, flutter_inappwebview 두개의 라이브러리를 이용해서 구현했었습니다. 그 이유는 카카오지도를 로드할 수 있는 html, js 파일을 별도로 만들어서 개발하고 싶다보니 flutter_inappwebview 라이브러리를 이용해서 local server 를 띄우고, webview_flutter 에서는 http://localhost:8080/kakaomap.html url 로 접속하여 지도를 로드하도록 하는 방식을 사용했었습니다.

그런데 kakao_map_plugin 을 만들때는 webview_flutter 라이브러리 하나만 이용하여 구현했습니다.

WebView(
initialUrl: _loadMap(), // html 파일을 string 으로 불러오도록
onWebViewCreated: (WebViewController webViewController) {
_mapController = KakaoMapController(webViewController);
},
javascriptMode: JavascriptMode.unrestricted,
javascriptChannels: _channels,
debuggingEnabled: true,
gestureRecognizers: <Factory<OneSequenceGestureRecognizer>>{
Factory(() => EagerGestureRecognizer()),
},
);


loadMap() {
return Uri.dataFromString('''<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
<script type="text/javascript"
src='https://dapi.kakao.com/v2/maps/sdk.js?autoload=true&appkey=${AuthRepository.instance.appKey}&libraries=services,clusterer,drawing'></script>
</head>
<body style="margin: 0;">
<div id="map" style="width: 100vw; height: 100vh;"></div>
<script>
... // 지도의 javascript 구현부
</script>
</body>
</html>
''', mimeType: 'text/html', encoding: Encoding.getByName('utf-8')).toString();
}

일단 WebView를 로드할 때 initialUrl 에 string을 이용하여 로드하도록 했습니다. 이렇게 했더니 결국 localhost 를 띄우는 작업은 필요가 없어져서 webview_flutter 라이브러리만 이용하게 되었습니다.

2. 샘플 앱

라이브러리 배포 할 때 example 폴더도 같이 있습니다. 여기에 최대한 많은 샘플을 작성하였습니다. 샘플은 카카오 지도 api 사이트에서 제공하는 것을 최대한 동일하게 구현하려고 했습니다.

아직 구현이 덜 되었나 웹환경이 아닌 모바일 환경이다보니 필요 없는 부분에 대해서는 주석처리 해 두었습니다.

현재는 기본 지도, 오버레이(마커, 원, 다각형) 등은 개발 및 샘플 작성이 완료 되었고, 정적지도도 개발 및 샘플 작성이 완료되었습니다. 로드뷰, 라이브러리등은 추가하여 업데이트 하려고 합니다.

아래는 샘플앱 스크린 샷입니다.

3. 정리

오늘은 라이브러리를 배포에 대한 간략한 내용을 작성해 보았습니다. 필요하신 분들은 사용해 보시고 피드백 남겨주시면 더 좋은 라이브러리가 될 수 있을것 같습니다. 감사합니다! 👏🏻👏🏻👏🏻

--

--