[Flutter] Google Map 현재 내 위치 띄우기

Flutter에서 Google Map에 현재 내 위치 띄우기 예제


Google Map API 준비

https://console.cloud.google.com/

API 및 서비스 -> 사용자 인증 정보 -> 사용자 인증 정보 만들기 -> API 키 생성 후 키 설정


API Key 설정

간단한 Google Map 예제이므로 어플리케이션 제한사항, API 제한사항 없음으로 진행하겠습니다. 만약 상업적, 팀 프로젝트시 Android, IOS 각각 API KEY 생성후 그에 맞는 어플리케이션 제한사항과 API 제한 사항을 꼭 설정할 것!

AndroidManifest.xml

IOS API 설정

ios/Runner/AppDelegate.swift


Flutter 위젯 구현

Flutter 패키지 Location, google_maps_flutter 설치

https://pub.dev/packages/google_maps_flutter, https://pub.dev/packages/location

pubspec.yml 파일 코드 추가

location: ^3.2.1 # 현재 내위치
google_maps_flutter: ^1.0.10 # Google Map

코드

import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:location/location.dart';

class GoogleMapPage extends StatefulWidget {
  String title;
  GoogleMapPage({this.title});

  @override
  _GoogleMapPageState createState() => _GoogleMapPageState();
}

class _GoogleMapPageState extends State<GoogleMapPage> {

  Location location;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    location = Location();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder(
        future: location.getLocation(),
        builder: (BuildContext context, AsyncSnapshot<LocationData> _) {
          if(!_.hasData){ /// 현재 내 위치데이터값이 null경우 로딩 
            return Center(
              child: CircularProgressIndicator(),
            );
          }
          return GoogleMap(
              initialCameraPosition: CameraPosition(
                  target: LatLng(_.data.latitude, _.data.longitude),
                  zoom: 16,
              ),
            onTap: (_){

            },
            myLocationEnabled: true,
            myLocationButtonEnabled: true,
            circles: Set.from([Circle(
              circleId: CircleId("location"),
              center: LatLng(_.data.latitude, _.data.longitude),
              strokeWidth: 1,
              //strokeColor: Colors.blue[200],
              radius: 500,
            )]),
          );
        },)
    );
  }
}

답글 남기기

이메일 주소는 공개되지 않습니다.