네이버 지도 를 플러터에서 띄울 수 있는 플러그인입니다.
Plug-in which shows naver map on flutter project support Android and iOS.
해당 플러그인은 원작자인 LBSTECH 의 허락을 맡고, 해당 라이브러리 를 기반으로 여러 부분을 보완한 라이브러리입니다.
해당 플러그인은 Naver Cloud PlatForm - Map 에서 제공하는 Map SDK 서비스를 Android와 iOS 환경에서 보여주는 플러그인입니다.
pubspec.yaml
에서 dependencies에 작성
dependencies:
flutter_naver_map: [최신버전]
[프로젝트 폴더]/android/app/src/AndroidManifest.xml
에
다음과 같이 권한을 선언하고 (선택사항) 과, 네이버 맵 SDK의 Client ID를 넣습니다.
권한 선언은 네이버 맵에서 현 위치 탐색 기능을 사용할 때만, 해당 권한 2개를 선언합니다.
<manifest>
<!-- 네이버 맵에서 현 위치 탐색 기능을 사용할 때만, 해당 권한 2개를 선언합니다 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application>
<activity> <!-- something --> </activity>
<!-- 플러터 자동 생성. 지우시면 안 됩니다. -->
<meta-data
android:name="flutterEmbedding"
android:value="2"/>
<!-- 네이버 맵 SDK의 Client ID를 넣는 곳입니다. 필수로 넣어야, 지도가 동작합니다. -->
<meta-data
android:name="com.naver.maps.map.CLIENT_ID"
android:value="여기에 Map Sdk의 Client ID를 넣습니다" />
</application>
</manifest>
네이버 Map SDK의 경우 안드로이드에서 지도를 표시하기 위해 기본값으로 GLSurfaceView를 사용합니다. 하지만, flutter에서 Hot Reload 기능을 사용할 경우, 네이버 Map SDK의 binary에서 정확하지 않은 이유로 Crash가 발생합니다.
따라서, 기본 옵션은 TextureView를 사용하도록 되어있습니다. 성능이 좋은 GLSurfaceView를 사용하려면, 아래 예제처럼 Hot Reload 기능을 사용하지 않는 Release 버전에서만 사용하도록 하시는 것을 권장드립니다.
NaverMap(
useSurface: kReleaseMode, //해당 옵션은 Android에서만 적용됩니다.
/* many other options */
)
단, TextField 위젯을 지도 위에서 사용하지 않는 경우에만 사용하시길 바랍니다.
[GLSurfaceView]를 사용하여 지도가 렌더링 되는 동안, [TextField]에 포커스가 이동하면 app crash가 발생한다. Flutter Engine에서 [TextField]의 변화를 업데이트할 때, [GLThread]를 사용하는데, 이 과정에서 [DeadObjectException]이 발생한다.
대용량 파일을 받기 위해 git-lfs 설치가 필요합니다. 터미널을 열고, 다음 커맨드를 실행해주세요.
$ brew install git-lfs
그리고 git-lfs을 사용하기 위해 다음의 커맨드를 실행해주세요.
lfs 사용 설정이 안될 경우 Pod를 통한 dependency가 다운로드 되지않습니다.
$ git lfs install
[프로젝트 폴더]/ios/Runner/Info.plist
에
다음과 같이 네이버 맵 SDK의 Client ID를 넣습니다.
<dict>
<key>NMFClientId</key>
<string>여기에 Map Sdk의 Client ID를 넣습니다</string>
</dict>
권한 선언은 네이버 맵에서 현 위치 탐색 기능을 사용할 때만 선언하시면 됩니다.
<dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string>여기에 위치 사용 목적을 적으시면 됩니다.</string>
</dict>
- 지도에서 제공하는 기본 컨트롤러가 잘 작동하지 않는 문제 (이유를 찾지 못하고 있음)
- android에서 네이버 로고 버튼을 누를 시, App이 Crash되는 현상(AppCompat 때문)으로 해당 버튼을 비활성화 하였음.
이슈와 PR은 언제든 환영입니다!!