[flutter] get_it를 사용하여 플러터 앱에서 지도와 위치 기반 기능을 어떻게 하는가?

이 포스트에서는 Get_it 패키지를 사용하여 Flutter 앱에서 지도와 위치 기반 기능을 구현하는 방법을 알아보겠습니다.

Get_it이란?

Get_it은 의존성 주입(Dependency Injection)을 구현하기 위한 패키지입니다. 의존성 주입은 객체 간의 의존성을 관리하기 위해 사용되며, 객체를 생성하는 책임을 다른 클래스에 위임하여 코드의 유지 보수성과 테스트 용이성을 향상시킵니다.

1. Get_it 패키지 가져오기

먼저, pubspec.yaml 파일에 Get_it 패키지를 추가해야합니다. 다음과 같이 dependencies 섹션에 Get_it을 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  get_it: ^7.2.0

그리고 패키지를 설치하기 위해 다음 명령을 실행합니다.

$ flutter pub get

2. 위치 서비스를 위한 패키지 추가하기

위치 기반 기능을 사용하려면 위치 서비스를 처리하는 패키지가 필요합니다. 이 예제에서는 geolocator 패키지를 사용합니다. 또한, 지도를 표시하기 위해 google_maps_flutter 패키지도 설치해야합니다.

dependencies:
  flutter:
    sdk: flutter
  get_it: ^7.2.0
  geolocator: ^7.2.0
  google_maps_flutter: ^2.1.1

위와 같이 패키지를 추가한 후 명령을 실행하여 패키지를 설치합니다.

$ flutter pub get

3. Get_it을 사용하여 의존성 주입 설정하기

이제 Get_it을 사용하여 지도와 위치 서비스에 대한 의존성 주입을 설정해보겠습니다.

import 'package:get_it/get_it.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

final getIt = GetIt.instance;

void setupLocator() {
  getIt.registerSingletonAsync<GoogleMapController>(() async {
    final GoogleMapController controller = await GoogleMapController
        .init();
    return controller;
  });

  getIt.registerSingleton<GeolocatorPlatform>(GeolocatorPlatform.instance);
}

위 코드에서 getIt 변수는 Get_it의 인스턴스를 가져옵니다. setupLocator 메서드는 의존성 주입을 설정하는 역할을 합니다. 여기에서는 GoogleMapControllerGeolocator를 싱글톤으로 등록합니다.

4. 지도와 위치 서비스 사용하기

이제 Get_it을 사용하여 등록한 싱글톤 객체들을 사용하여 지도와 위치 서비스를 활용할 수 있습니다.

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

class MapScreen extends StatefulWidget {
  @override
  _MapScreenState createState() => _MapScreenState();
}

class _MapScreenState extends State<MapScreen> {
  GoogleMapController _controller;
  Position _currentPosition;

  @override
  void initState() {
    super.initState();
    _controller = GetIt.instance<GoogleMapController>();
    _getCurrentPosition();
  }

  void _getCurrentPosition() async {
    final geolocator = GetIt.instance<GeolocatorPlatform>();
    await geolocator.requestPermission();
    final position = await geolocator.getCurrentPosition();
    setState(() {
      _currentPosition = position;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Map'),
      ),
      body: GoogleMap(
        mapType: MapType.normal,
        initialCameraPosition: CameraPosition(
          target: LatLng(_currentPosition.latitude, _currentPosition.longitude),
          zoom: 14.0,
        ),
        onMapCreated: (GoogleMapController controller) {
          _controller = controller;
        },
      ),
    );
  }
}

위 코드에서는 GoogleMapControllerGeolocator를 Get_it을 통해 가져온 후, 지도를 표시하고 현재 위치를 얻어옵니다.

결론

Get_it 패키지를 사용하면 Flutter 앱에서 지도와 위치 기반 기능을 쉽게 구현할 수 있습니다. 의존성 주입을 통해 객체 간의 관계를 관리하고, 코드의 유지 보수성과 테스트 용이성을 향상시킬 수 있습니다. Get_it의 다양한 기능과 설정을 활용하여 더욱 효율적인 앱을 개발해보세요.

많은 성공을 빕니다! :rocket:

참고 자료