[flutter] 플러터(Flutter)에서 위치 기반 서비스 사용하기

플러터(Flutter)는 구글에서 개발한 UI 프레임워크로, 다양한 플랫폼에서 동일한 UI를 만들 수 있습니다. 이번에는 플러터에서 위치 기반 서비스를 사용하는 방법에 대해 알아보겠습니다.

1. 위치 권한 설정

우선, 위치 정보를 사용하기 위해서는 앱에서 위치 권한을 설정해야 합니다. pubspec.yaml 파일에 다음과 같은 의존성을 추가해주세요:

dependencies:
  location: ^3.0.2

그리고, AndroidManifest.xml 파일에 다음과 같은 권한을 추가해주세요:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

2. 위치 정보 가져오기

위치 정보를 가져오기 위해서는 location 패키지를 사용합니다. 먼저, 다음과 같이 위치 서비스를 초기화합니다:

import 'package:location/location.dart';

void initLocationService() async {
  Location location = new Location();

  bool serviceEnabled = await location.serviceEnabled();
  if (!serviceEnabled) {
    serviceEnabled = await location.requestService();
    if (!serviceEnabled) {
      return;
    }
  }
}

위 코드에서 requestService() 메서드를 통해 사용자에게 위치 서비스 권한을 요청합니다.

이제 위치 정보를 가져올 준비가 되었습니다. 다음과 같이 위치 정보를 가져올 수 있습니다:

import 'package:location/location.dart';

void getLocation() async {
  LocationData locationData;

  Location location = new Location();

  bool serviceEnabled = await location.serviceEnabled();
  if (!serviceEnabled) {
    serviceEnabled = await location.requestService();
    if (!serviceEnabled) {
      return;
    }
  }

  PermissionStatus permissionStatus = await location.hasPermission();
  if (permissionStatus == PermissionStatus.denied) {
    permissionStatus = await location.requestPermission();
    if (permissionStatus != PermissionStatus.granted) {
      return;
    }
  }

  locationData = await location.getLocation();
}

위 코드에서 getLocation() 메서드를 호출하면 현재 사용자의 위치 정보를 가져올 수 있습니다.

위치 정보를 가져왔다면 해당 정보를 활용하여 원하는 작업을 수행할 수 있습니다. 예를 들어, 현재 위치를 지도에 표시하거나, 주변 가게 정보를 가져오는 등의 작업을 할 수 있습니다.

3. 위치 기반 서비스 활용하기

위치 정보를 활용하여 다양한 서비스를 구현할 수 있습니다. 예를 들어, 주변 가게 정보를 가져오는 서비스를 만들어보겠습니다:

import 'package:http/http.dart' as http;
import 'package:location/location.dart';

void getNearbyStores() async {
  LocationData locationData;

  Location location = new Location();

  bool serviceEnabled = await location.serviceEnabled();
  if (!serviceEnabled) {
    serviceEnabled = await location.requestService();
    if (!serviceEnabled) {
      return;
    }
  }

  PermissionStatus permissionStatus = await location.hasPermission();
  if (permissionStatus == PermissionStatus.denied) {
    permissionStatus = await location.requestPermission();
    if (permissionStatus != PermissionStatus.granted) {
      return;
    }
  }

  locationData = await location.getLocation();

  // 사용자의 위치 좌표
  double latitude = locationData.latitude;
  double longitude = locationData.longitude;

  // 주변 가게 정보를 가져오는 API 호출
  String apiUrl =
      'https://example.com/api/stores?lat=$latitude&lng=$longitude';
  http.Response response = await http.get(apiUrl);

  // API 응답 결과 처리
  if (response.statusCode == 200) {
    // 주변 가게 정보를 가져온 경우 처리 로직 추가
  } else {
    // 주변 가게 정보를 가져오지 못한 경우 처리 로직 추가
  }
}

위 코드에서는 사용자의 위치 좌표를 얻어와 해당 좌표를 이용하여 주변 가게 정보를 가져오는 API를 호출합니다. API는 결과에 따라 로직을 추가로 처리할 수 있습니다.

위치 기반 서비스는 사용자에게 편의성을 제공하는데 매우 유용한 기능입니다. 플러터의 위치 기반 서비스를 활용하여 다양한 위치 기반 앱을 개발해보세요!

참고 자료