[flutter] 플러터에서 위치 정보를 이용한 주변 카페 검색 앱 만들기

이번에는 플러터를 사용하여 위치 정보를 활용하여 주변 카페를 검색하는 애플리케이션을 만들어보겠습니다. 이 앱은 사용자의 현재 위치를 기반으로 주변에 있는 카페를 찾아주고 그 위치를 지도에 표시해줄 것입니다.

필요한 라이브러리

먼저, 이 애플리케이션을 만들기 위해 다음과 같은 라이브러리들을 사용할 것입니다.

이 라이브러리들을 pubspec.yaml 파일에 추가하여 설치합니다.

dependencies:
  flutter:
    sdk: flutter
  geolocator: ^8.0.1
  google_maps_flutter: ^2.1.1
  http: ^0.14.0
  flutter_dotenv: ^5.0.3

위치 정보 가져오기

먼저, 사용자의 현재 위치를 가져와야 합니다. geolocator 라이브러리를 사용하여 위치 정보를 가져오고, 받아온 위치 정보를 기반으로 HTTP 요청을 보내어 주변 카페를 검색할 것입니다.

import 'package:geolocator/geolocator.dart';

void getLocation() async {
  Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
  double latitude = position.latitude;
  double longitude = position.longitude;
}

주변 카페 검색

위치 정보를 가져왔으면, 해당 위치를 기반으로 Google Places API를 이용하여 주변 카페를 검색할 수 있습니다. http 라이브러리를 사용하여 Places API에 요청을 보내고, 받아온 데이터를 지도에 표시할 것입니다.

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

Future<void> searchNearbyCafes(double lat, double lng) async {
  String apiKey = dotenv.env['GOOGLE_MAPS_API_KEY'];
  String url = 'https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=$lat,$lng&radius=1500&type=cafe&key=$apiKey';

  final response = await http.get(Uri.parse(url));
  // 받아온 데이터를 처리하고 지도에 표시하는 작업 수행
}

지도에 표시하기

google_maps_flutter 라이브러리를 사용하여 받아온 카페 위치 정보를 지도에 표시할 수 있습니다. 받아온 데이터를 지도에 마커로 표시하여 사용자에게 시각적으로 보여줄 것입니다.

import 'package:google_maps_flutter/google_maps_flutter.dart';

GoogleMapController mapController;
Set<Marker> markers = {};

void _onMapCreated(GoogleMapController controller) {
  mapController = controller;

  // 받아온 카페 위치 정보를 markers에 추가
  markers.add(Marker(
    markerId: MarkerId("1"),
    position: LatLng(카페 위도, 카페 경도),
    infoWindow: InfoWindow(title: '카페 이름'),
  ));

  // 지도에 마커 표시
  mapController.animateCamera(CameraUpdate.newLatLngZoom(LatLng(카페 위도, 카페 경도), 15));
}

결론

이러한 방식으로 플러터를 사용하여 위치 정보를 활용하여 주변 카페를 검색하고 지도에 표시하는 애플리케이션을 만들 수 있습니다. 사용자의 위치 정보를 가져오고, 해당 위치를 기반으로 외부 API를 호출하여 데이터를 받아온 후 지도에 표시하는 것이 주요한 기능입니다. 이를 참고하여 실제 애플리케이션을 완성해 보시기 바랍니다.

참고 자료