[flutter] 플러터에서 useLocation 훅(hook)을 활용한 지도 연동 기능 구현

플러터(Flutter) 앱에서 지도 기능을 구현하고 사용자의 위치를 받아오는 것은 매우 중요합니다. 이를 위해 useLocation 훅을 사용하여 지도와 위치를 연동하는 방법을 알아봅시다.

1. useLocation 훅 설치하기

먼저, 플러터 프로젝트에 useLocation 훅을 설치해야 합니다. 이 훅은 플러터 앱에서 위치 정보를 손쉽게 다룰 수 있도록 도와줍니다.

import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:geolocator/geolocator.dart';

Position useLocation() {
  final location = useState<Position>(Position(latitude: 0, longitude: 0));

  useEffect(() {
    _getLocation().then((value) {
      location.value = value;
    });
    return () {};
  }, []);

  return location.value;
}

Future<Position> _getLocation() async {
  LocationPermission permission = await Geolocator.requestPermission();
  if (permission == LocationPermission.whileInUse ||
      permission == LocationPermission.always) {
    return await Geolocator.getCurrentPosition();
  } else {
    return Position(latitude: 0, longitude: 0);
  }
}

위와 같이 useLocation 훅을 작성한 후, 플러터 프로젝트에 추가합니다.

2. 지도 연동하기

이제 useLocation 훅을 이용하여 지도와 위치를 연동해보겠습니다. 구글맵을 사용하여 사용자의 위치를 표시하는 예제를 살펴봅시다.

import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MapScreen(),
    );
  }
}

class MapScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final userLocation = useLocation();

    return Scaffold(
      appBar: AppBar(
        title: Text('지도 연동'),
      ),
      body: GoogleMap(
        initialCameraPosition: CameraPosition(
          target: LatLng(userLocation.latitude, userLocation.longitude),
          zoom: 15,
        ),
        markers: {
          Marker(
            markerId: MarkerId('user-location'),
            position: LatLng(userLocation.latitude, userLocation.longitude),
            infoWindow: InfoWindow(title: '현재 위치'),
          ),
        },
      ),
    );
  }
}

위와 같이 GoogleMap 위젯을 사용하여 지도를 표시하고, useLocation 훅으로 가져온 사용자의 위치를 마커로 표시할 수 있습니다.

이제 플러터 앱에서 useLocation 훅을 활용하여 지도와 위치를 연동하는 방법에 대해 알아보았습니다.

끝.