[flutter] 플러터에서 위치 정보를 이용한 주변 치킨 배달 앱 만들기

플러터(Flutter)를 사용하여 위치 정보를 활용하여 주변 치킨 배달 서비스를 제공하는 앱을 만들어보겠습니다.

목표

우리의 앱은 사용자의 현재 위치를 기반으로 주변 치킨 배달 서비스를 찾고, 그 중에서 가장 가까운 가게를 안내해줄 것입니다.

필요한 요소

구현

1. 위치 정보 확인

먼저, 사용자의 현재 위치를 확인하기 위해 geolocator 패키지를 사용합니다. 이 패키지를 이용하면 사용자의 위치를 쉽게 확인할 수 있습니다.

import 'package:geolocator/geolocator.dart';

Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
double userLat = position.latitude;
double userLong = position.longitude;

2. 지도 표시

다음으로, Google Maps 플러그인을 사용하여 지도를 표시하고, 사용자와 가게의 위치를 표시합니다.

import 'package:google_maps_flutter/google_maps_flutter.dart';

GoogleMapController mapController;
Set<Marker> markers = Set();

GoogleMap(
  onMapCreated: (controller) {
    mapController = controller;
  },
  initialCameraPosition: CameraPosition(
    target: LatLng(userLat, userLong),
    zoom: 14.0,
  ),
  markers: markers,
)

3. 주변 치킨 배달 가게 찾기

위치 정보를 이용하여 주변 치킨 배달 가게를 검색하고, 해당 가게들을 지도 위에 마커로 표시합니다. 이때, 지도 API를 사용하여 가게들의 위치를 받아오고, 마커를 추가합니다.

// 가게 위치 받아오기
List<Store> stores = await getNearbyStores(userLat, userLong);

// 마커 추가
markers.addAll(stores.map((store) {
  return Marker(
    markerId: MarkerId(store.id),
    position: LatLng(store.latitude, store.longitude),
    infoWindow: InfoWindow(title: store.name, snippet: store.address),
  );
}).toSet());

4. 가장 가까운 가게 찾기

지도를 통해 표시된 주변 가게들 중에서 사용자와 가장 가까운 가게를 찾아 마커를 다르게 표시하여 사용자에게 안내해줍니다.

double closestDistance = double.infinity;
Store closestStore;

for (var store in stores) {
  double distance = calculateDistance(userLat, userLong, store.latitude, store.longitude);
  if (distance < closestDistance) {
    closestDistance = distance;
    closestStore = store;
  }
}

// 가장 가까운 가게 마커를 빨간색으로 변경
Marker closestMarker = Marker(
  markerId: MarkerId(closestStore.id),
  position: LatLng(closestStore.latitude, closestStore.longitude),
  infoWindow: InfoWindow(title: closestStore.name, snippet: closestStore.address),
  icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueRed),
);

markers.removeWhere((marker) => marker.markerId.value == closestStore.id);
markers.add(closestMarker);

결론

위의 단계를 따라가면, 플러터를 사용하여 위치 정보를 이용한 주변 치킨 배달 앱을 만들 수 있습니다. 사용자의 위치를 확인하고, 주변 가게들을 지도에 표시하여 사용자에게 제일 가까운 가게를 안내해줄 수 있습니다.

위치 기반 서비스를 사용하여 다양한 형태의 앱을 만들 수 있으며, 사용자에게 더 많은 가치를 제공할 수 있는 서비스를 구현하는 데 도움이 될 것입니다.