[flutter] 플러터 geolocator를 이용한 위치 기반 서비스 개발 방법

플러터(Flutter)는 Google에서 개발한 모바일 애플리케이션 개발 프레임워크로, iOS와 Android 모두에서 동작하는 크로스 플랫폼 개발을 지원합니다. 이번에는 플러터의 Geolocator 패키지를 이용하여 위치 기반 서비스를 개발하는 방법에 대해 알아보겠습니다.

Geolocator 패키지란?

Geolocator는 플러터에서 위치 관련 기능을 제공하는 패키지입니다. 이 패키지를 사용하면 사용자의 현재 위치, 거리 계산, 주소 변환 등 다양한 위치 기반 서비스를 개발할 수 있습니다.

Geolocator 패키지 설치하기

프로젝트의 pubspec.yaml 파일에 아래와 같이 Geolocator 패키지를 추가해주세요.

dependencies:
  flutter:
    sdk: flutter

  geolocator: ^8.0.0

그리고 터미널에서 아래 명령어를 실행하여 패키지를 설치해주세요.

flutter pub get

위치 정보 가져오기

Geolocator 패키지를 사용하여 사용자의 현재 위치를 가져오는 방법은 매우 간단합니다. geolocator 패키지를 import 한 후 getCurrentPosition 메서드를 호출하면 됩니다.

import 'package:geolocator/geolocator.dart';

void getLocation() async {
  Position position = await Geolocator.getCurrentPosition(
    desiredAccuracy: LocationAccuracy.high,
  );
  
  print('현재 위치: ${position.latitude}, ${position.longitude}');
}

위 코드에서 getCurrentPosition 메서드의 desiredAccuracy 파라미터를 통해 위치 정확도를 설정할 수 있습니다. 높은 정확도를 설정할수록 배터리 소모량이 증가할 수 있으므로, 애플리케이션의 요구 사항에 따라 적절한 값을 선택해야 합니다.

권한 요청하기

위치 정보를 가져오기 위해서는 사용자로부터 위치 권한을 요청해야 합니다. Geolocator 패키지를 사용하여 위치 권한을 요청하는 방법은 다음과 같습니다.

PermissionStatus permission = await Geolocator.checkPermission();
if (permission == PermissionStatus.denied) {
  permission = await Geolocator.requestPermission();
  if (permission != PermissionStatus.granted) {
    // 권한이 거부되었을 때 처리할 로직 작성
    return;
  }
}

if (permission == PermissionStatus.granted) {
  // 위치 정보 가져오기
  getLocation();
}

위 코드에서 checkPermission 메서드를 사용하여 위치 권한 상태를 확인하고, requestPermission 메서드를 사용하여 권한 요청 대화상자를 보여줍니다. 사용자가 권한을 허용하지 않았을 경우, requestPermission 메서드는 다시 권한 요청 대화상자를 보여주며, 권한이 거부되었을 때 처리할 로직을 작성할 수 있습니다.

위치 업데이트 받기

Geolocator 패키지를 사용하여 위치 정보를 실시간으로 업데이트 받는 방법도 제공됩니다. getPositionStream 메서드를 사용하여 위치 업데이트를 받을 수 있습니다.

StreamSubscription<Position> positionStream;

void startListening() {
  positionStream = Geolocator.getPositionStream(
    desiredAccuracy: LocationAccuracy.best,
    distanceFilter: 10,
  ).listen((Position position) {
    // 위치 업데이트 처리 로직 작성
    print('새로운 위치 업데이트: ${position.latitude}, ${position.longitude}');
  });
}

void stopListening() {
  positionStream?.cancel();
}

위 코드에서 getPositionStream 메서드의 distanceFilter 파라미터를 통해 위치 업데이트 간격을 설정할 수 있습니다. 이 값에 따라 위치 업데이트의 빈도를 조절할 수 있습니다. startListening 메서드를 호출하여 위치 업데이트를 시작하고, stopListening 메서드를 호출하여 위치 업데이트를 중지할 수 있습니다.

마무리

이제 플러터의 Geolocator 패키지를 이용하여 위치 기반 서비스를 개발하는 방법에 대해 알아보았습니다. 이를 통해 사용자의 현재 위치를 가져오고, 권한 요청 및 위치 업데이트를 처리할 수 있습니다. 플러터의 다른 패키지들과 결합하여 보다 다양하고 실용적인 위치 기반 애플리케이션을 개발해보세요.

더 자세한 내용은 Geolocator 패키지 문서를 참고하시기 바랍니다. 감사합니다!

References