Apple HealthKit(iOS) / Google Health Connect(Android)와 연동해서
걸음 수, 심박수, 수면, 칼로리 등 건강 데이터를 읽고 쓸 수 있는 패키지.
import 'package:health/health.dart';
final health = Health();
// 권한 요청
final types = [HealthDataType.STEPS, HealthDataType.HEART_RATE];
final permissions = types.map((_) => HealthDataAccess.READ).toList();
final granted = await health.requestAuthorization(types, permissions: permissions);
// 데이터 읽기
if (granted) {
final now = DateTime.now();
final yesterday = now.subtract(Duration(days: 1));
final data = await health.getHealthDataFromTypes(
startTime: yesterday,
endTime: now,
types: types,
);
for (final point in data) {
print('${point.typeString}: ${point.value}');
}
}
iOS — Info.plist에 권한 설명 추가 필수
<key>NSHealthShareUsageDescription</key>
<string>건강 데이터를 읽기 위해 권한이 필요합니다</string>
<key>NSHealthUpdateUsageDescription</key>
<string>건강 데이터를 쓰기 위해 권한이 필요합니다</string>
Android — AndroidManifest.xml에 Health Connect 권한 추가
Health Connect 앱이 기기에 설치돼 있어야 함
기기의 내장 만보계 센서를 직접 읽는 패키지.
health 패키지처럼 외부 앱 연동 없이 센서 값을 바로 받아올 수 있음.
import 'package:pedometer/pedometer.dart';
// 걸음 수 스트림
late StreamSubscription<StepCount> _stepCountStream;
// 보행 상태 스트림 (walking / stopped)
late StreamSubscription<PedestrianStatus> _pedestrianStatusStream;
void startTracking() {
_stepCountStream = Pedometer.stepCountStream.listen(
(StepCount event) {
print('걸음 수: ${event.steps}');
},
onError: (e) => print('걸음 수 오류: $e'),
);
_pedestrianStatusStream = Pedometer.pedestrianStatusStream.listen(
(PedestrianStatus event) {
print('보행 상태: ${event.status}'); // walking or stopped
},
onError: (e) => print('보행 상태 오류: $e'),
);
}
iOS — Info.plist
<key>NSMotionUsageDescription</key>
<string>걸음 수 측정을 위해 모션 센서 접근이 필요합니다</string>
Android — AndroidManifest.xml
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
| health | pedometer | |
|---|---|---|
| 데이터 소스 | HealthKit / Health Connect | 기기 내장 센서 |
| 걸음 수 누적 | 플랫폼이 관리 | 앱 실행 중만 카운트 |
| 다양한 데이터 | 심박수, 수면 등 다양 | 걸음 수, 보행 상태만 |
| 세팅 난이도 | 복잡 (외부 앱 연동) | 단순 |
| 앱 종료 시 | 데이터 유지 | 초기화 |
→ 걸음 수만 필요하면 pedometer, 다양한 건강 데이터가 필요하면 health
두 패키지 모두 권한 요청이 핵심.
pedometer는 가볍지만 앱 꺼지면 초기화되니까 로컬 저장소에 누적값 따로 저장하는 로직이 필요함.
health는 세팅이 까다롭지만 플랫폼이 데이터를 관리해줘서 장기 기록 앱엔 더 적합함.