[flutter] 플러터 geolocator를 이용한 위치 기반 헬스케어 애플리케이션 개발 방법

이 튜토리얼에서는 Flutter의 패키지인 geolocator를 사용하여 위치 기반 헬스케어 애플리케이션을 개발하는 방법을 알아보겠습니다. geolocator는 GPS를 통해 사용자의 현재 위치를 가져오는 등의 위치 관련 기능을 제공합니다.

목차

  1. 앱 프로젝트 설정
  2. geolocator 패키지 설치
  3. 위치 권한 요청
  4. 사용자 위치 가져오기
  5. 위치 정보 확인
  6. 결론
  7. 참고 자료

앱 프로젝트 설정

우선 Flutter 프로젝트를 생성해야합니다. Flutter의 개발 환경이 이미 설정되어 있다고 가정하고 아래의 명령어를 실행하여 새로운 프로젝트를 생성합니다.

$ flutter create health_care_app
$ cd health_care_app

위 명령을 통해 health_care_app이라는 이름의 새로운 프로젝트 폴더가 생성되며, 해당 폴더로 이동합니다.

geolocator 패키지 설치

Flutter 프로젝트 폴더에서 pubspec.yaml 파일을 열고, dependencies 항목에 geolocator 패키지를 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  geolocator: ^7.6.2

패키지 목록에 변경사항을 적용하기 위해 아래 명령어를 실행합니다.

$ flutter pub get

이제 geolocator 패키지가 프로젝트에 추가되었습니다.

위치 권한 요청

사용자의 위치를 가져오기 위해서는 앱에서 위치 권한을 요청해야 합니다. AndroidManifest.xml 파일과 Info.plist 파일에 위치 권한을 추가하겠습니다.

Android

AndroidManifest.xml 파일을 열고 아래의 코드를 추가합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.health_care_app">
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <!-- ... -->
</manifest>

iOS

Info.plist 파일을 열고 아래의 코드를 추가합니다.

<key>NSLocationWhenInUseUsageDescription</key>
<string>Your location is required to provide accurate health care services.</string>

이제 위치 권한을 요청할 준비가 되었습니다.

사용자 위치 가져오기

이제 앱에서 사용자의 위치를 가져오는 함수를 작성해보겠습니다. main.dart 파일을 열고 다음과 같이 코드를 작성합니다.

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await requestPermission();
  final position = await getCurrentPosition();
  runApp(MyApp(position));
}

class MyApp extends StatelessWidget {
  final Position position;

  MyApp(this.position);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // ... 앱 화면 구성
    );
  }
}

Future<void> requestPermission() async {
  LocationPermission permission;

  permission = await Geolocator.checkPermission();
  if (permission == LocationPermission.denied) {
    permission = await Geolocator.requestPermission();
    if (permission == LocationPermission.denied) {
      // 위치 권한 거부됨
      return;
    }
  }

  if (permission == LocationPermission.deniedForever) {
    // 다시 묻지 않음 선택됨
    return;
  }
}

Future<Position> getCurrentPosition() async {
  final position = await Geolocator.getCurrentPosition(
      desiredAccuracy: LocationAccuracy.high);
  return position;
}

위 코드에서 main() 함수에서는 requestPermission() 함수를 호출하여 위치 권한을 요청하고, getCurrentPosition() 함수를 호출하여 현재 위치를 가져옵니다. 이를 위해 Geolocator 패키지의 메소드인 checkPermission()requestPermission()을 사용합니다.

위치 정보 확인

이제 사용자의 위치를 확인하기 위해 앱 화면을 구성해보겠습니다. MyApp 위젯의 build() 메소드에서 위치 정보를 출력하도록 코드를 수정해보겠습니다.

class MyApp extends StatelessWidget {
  final Position position;

  MyApp(this.position);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Health Care App'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Your current location:',
              ),
              SizedBox(height: 10),
              Text(
                'Latitude: ${position.latitude}',
              ),
              Text(
                'Longitude: ${position.longitude}',
              ),
            ],
          ),
        ),
      ),
    );
  }
}

위 코드에서는 Text 위젯을 사용하여 현재 위치의 위도와 경도를 표시합니다. 이제 앱을 실행하면 현재 위치 정보가 화면에 출력됩니다.

결론

이렇게 Flutter의 geolocator 패키지를 사용하여 위치 기반 헬스케어 애플리케이션을 개발하는 방법을 알아보았습니다. geolocator를 통해 사용자의 위치를 가져와 활용함으로써 다양한 위치 기반 서비스를 개발할 수 있습니다.

참고 자료