[flutter] 플러터에서 위치 정보를 이용한 낚시 예약 앱 만들기

이번에는 플러터(Flutter)를 사용하여 위치 정보를 이용한 낚시 예약 앱을 만들어 보겠습니다. 이 앱은 사용자의 현재 위치를 기반으로 가까운 낚시터를 찾고 예약할 수 있도록 도와줍니다.

위치 권한 획득

우선, 앱에서 위치 정보를 사용하기 위해 필요한 권한을 획득해야 합니다. 플러터에서는 geolocator 패키지를 사용하여 위치 서비스와 상호작용할 수 있습니다. 이 패키지를 이용하여 사용자의 위치를 가져오고 위치 권한을 관리할 수 있습니다.

import 'package:geolocator/geolocator.dart';

void _getLocation() async {
  LocationPermission permission = await Geolocator.checkPermission();
  if (permission == LocationPermission.denied) {
    permission = await Geolocator.requestPermission();
    if (permission == LocationPermission.denied) {
      // 위치 권한이 거부됐을 경우 처리
    }
  }
  if (permission == LocationPermission.deniedForever) {
    // 위치 권한이 영원히 거부됐을 경우 처리
  }
  if (permission == LocationPermission.whileInUse ||
      permission == LocationPermission.always) {
    Position position = await Geolocator.getCurrentPosition(
        desiredAccuracy: LocationAccuracy.high);
    // 위치 정보를 이용하여 낚시터 검색 및 예약 처리
  }
}

낚시터 정보 가져오기

다음으로, 위치 정보를 기반으로 현재 위치 주변의 낚시터 정보를 가져와야 합니다. 이를 위해 외부 API를 사용하거나 앱 내부에 낚시터 데이터를 포함시킬 수 있습니다.

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

Future<List<FishingSpot>> fetchFishingSpots(double latitude, double longitude) async {
  final response = await http.get(Uri.parse('https://api.example.com/fishing_spots?lat=$latitude&lon=$longitude'));
  if (response.statusCode == 200) {
    Iterable list = json.decode(response.body);
    return List<FishingSpot>.from(list.map((model) => FishingSpot.fromJson(model)));
  } else {
    throw Exception('Failed to load fishing spots');
  }
}

class FishingSpot {
  final String name;
  final double latitude;
  final double longitude;

  FishingSpot({required this.name, required this.latitude, required this.longitude});

  factory FishingSpot.fromJson(Map<String, dynamic> json) {
    return FishingSpot(
      name: json['name'],
      latitude: json['latitude'],
      longitude: json['longitude'],
    );
  }
}

지도 표시 및 예약

마지막으로, 가져온 낚시터 정보를 지도에 표시하고 사용자가 선택한 낚시터를 예약할 수 있도록 해야 합니다. 플러터에서는 google_maps_flutter 패키지를 사용하여 지도를 표시하고 상호작용할 수 있습니다.

import 'package:google_maps_flutter/google_maps_flutter.dart';

GoogleMapController? mapController;
Set<Marker> _markers = {};

void _onMapCreated(GoogleMapController controller) {
  mapController = controller;
}

void _addMarkers(List<FishingSpot> fishingSpots) {
  _markers.clear();
  for (var spot in fishingSpots) {
    _markers.add(
      Marker(
        markerId: MarkerId(spot.name),
        position: LatLng(spot.latitude, spot.longitude),
        infoWindow: InfoWindow(title: spot.name, snippet: 'Tap to reserve'),
        onTap: () {
          // 사용자가 낚시터를 선택했을 때의 처리
        },
      ),
    );
  }
}

GoogleMap(
  onMapCreated: _onMapCreated,
  markers: _markers,
  initialCameraPosition: CameraPosition(
    target: LatLng(currentLatitude, currentLongitude),
    zoom: 12.0,
  ),
),

이제 위의 코드를 이용하여 플러터에서 위치 정보를 이용한 낚시 예약 앱을 만들 수 있습니다. 사용자가 앱을 열면 현재 위치 주변의 낚시터를 지도에 표시하고, 원하는 낚시터를 선택하여 예약할 수 있는 기능을 갖춘 앱이 완성됩니다.

위 예시는 플러터를 사용하여 위치 정보를 이용한 간단한 앱을 만드는 방법을 보여줍니다. 여러분의 프로젝트에 적용하여 보다 다양하고 흥미로운 기능을 추가해 보세요!

References