[flutter] 플러터 geolocator를 이용한 위치 기반 실시간 쇼핑몰 애플리케이션 개발

개요

이번 프로젝트에서는 Flutter를 사용하여 위치 기반 실시간 쇼핑몰 애플리케이션을 개발합니다. 애플리케이션은 사용자의 위치를 추적하고, 주변의 가까운 상점을 찾아줍니다. 이를 위해 geolocator 패키지를 사용하며, Flutter에서 위치 기반 서비스를 구현하는 방법을 알아보겠습니다.

geolocator 패키지 설치

먼저, 프로젝트에 geolocator 패키지를 추가해야 합니다. pubspec.yaml 파일을 열고 dependencies 섹션에 다음과 같이 추가합니다:

dependencies:
  geolocator: ^6.0.0

프로젝트의 루트 디렉토리에서 flutter pub get 명령을 실행하여 패키지를 설치합니다.

위치 권한 요청

애플리케이션이 사용자의 위치를 액세스하기 위해서는 위치 권한이 필요합니다. 이를 위해 AndroidManifest.xml 파일과 Info.plist 파일에 위치 권한을 추가해야 합니다. 아래의 코드를 추가하면 됩니다:

Android

<manifest ...
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    ...
</manifest>

iOS

<key>NSLocationWhenInUseUsageDescription</key>
<string>Your location is required to find nearby stores.</string>

위치 권한을 추가한 후, 애플리케이션을 다시 빌드하여 위치 권한이 정상적으로 작동하는지 확인합니다.

위치 정보 가져오기

Geolocator 패키지는 사용자의 현재 위치를 가져오는 기능을 제공합니다. 다음 코드를 사용하여 위치 정보를 가져올 수 있습니다:

import 'package:geolocator/geolocator.dart';

void getLocation() async {
  bool serviceEnabled;
  LocationPermission permission;

  // 위치 서비스 활성화 확인
  serviceEnabled = await Geolocator.isLocationServiceEnabled();
  if (!serviceEnabled) {
    return;
  }

  // 위치 권한 확인
  permission = await Geolocator.checkPermission();
  if (permission == LocationPermission.deniedForever) {
    return;
  }

  // 위치 권한 요청
  if (permission == LocationPermission.denied) {
    permission = await Geolocator.requestPermission();
    if (permission != LocationPermission.whileInUse && permission != LocationPermission.always) {
      return;
    }
  }

  // 위치 정보 가져오기
  Position position = await Geolocator.getCurrentPosition();
  print('latitude: ${position.latitude}, longitude: ${position.longitude}');
}

위 코드는 위치 서비스 활성화 여부, 위치 권한 상태를 확인하고, 권한이 없는 경우 권한 요청을 수행합니다. 마지막으로 Geolocator.getCurrentPosition() 메소드를 사용하여 현재 위치를 가져옵니다.

위치 기반 서비스 구현

위치 정보를 성공적으로 가져왔다면, 이제 실시간 쇼핑몰 기능을 구현할 차례입니다. 예를 들어, 사용자 주변의 가까운 상점을 찾아 보여주는 기능을 구현해보겠습니다.

서버에서 상점 목록 데이터를 가져오는 API가 있다고 가정하겠습니다. 이 API는 사용자의 위치 정보를 기반으로 가까운 순서대로 상점 목록을 반환합니다. 해당 API를 호출하고 결과를 애플리케이션에 표시하는 코드는 다음과 같을 수 있습니다:

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

List<Store> stores = [];

void getNearbyStores(Position position) async {
  Uri apiUrl = Uri.parse('https://example.com/api/stores?lat=${position.latitude}&lon=${position.longitude}');
  http.Response response = await http.get(apiUrl);

  if (response.statusCode == 200) {
    List<dynamic> json = jsonDecode(response.body);
    stores = json.map((j) => Store.fromJson(j)).toList();
    print('Nearby stores: $stores');
  } else {
    throw Exception('Failed to load stores');
  }
}

위 코드는 http 패키지를 사용하여 서버 API를 호출하고, 응답을 JSON 형태로 변환한 후 Store 객체의 리스트로 저장합니다.

결론

이제 플러터 geolocator 패키지를 사용하여 위치 기반 실시간 쇼핑몰 애플리케이션을 개발하는 방법을 알아보았습니다. geolocator 패키지를 통해 사용자의 위치 정보를 가져올 수 있으며, 이를 기반으로 다양한 위치 기반 서비스를 구현할 수 있습니다.

위치 기반 서비스는 사용자에게 실시간 정보를 제공하고, 편리한 사용자 경험을 제공합니다. 애플리케이션의 성능과 사용자 만족도를 높이기 위해 위치 기반 기능을 적절히 활용해보세요.

참고 자료