Flutter健康数据访问插件flutter_health_kit的使用
Flutter健康数据访问插件flutter_health_kit的使用
此插件允许Flutter应用程序读取并订阅Apple HealthKit存储中的更改。
开始使用
请求授权以从HealthKit存储中读取数据:
bool isAuthorized = await FlutterHealthKit.requestAuthorization(
read: [HKSampleTypeIdentifier.workout]);
从HealthKit存储中读取数据:
final workouts = await FlutterHealthKit.querySampleType<Workout>(HKSampleTypeIdentifier.workout);
完整示例代码
以下是一个完整的示例代码,展示了如何在Flutter应用中使用flutter_health_kit
插件来请求授权并读取运动数据。
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter_health_kit/flutter_health_kit.dart';
import 'package:flutter_health_kit/models.dart';
import 'package:flutter_health_kit/types.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _status = '未知';
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
// 平台消息是异步的,所以我们初始化在一个异步方法中。
Future<void> initPlatformState() async {
String status;
// 平台消息可能会失败,所以我们使用try/catch来捕获PlatformException。
// 我们还处理了消息可能返回null的情况。
try {
final result = await FlutterHealthKit.requestAuthorization(
read: [HKSampleTypeIdentifier.workout]);
status = result ? '已授权' : '未授权';
final workouts = await FlutterHealthKit.querySampleType<Workout>(HKSampleTypeIdentifier.workout);
debugPrint('Workouts: ${workouts.length}');
} on PlatformException {
status = '获取授权失败。';
}
// 如果在异步平台消息还在飞行时小部件被从树中移除,则我们希望丢弃回复而不是调用setState来更新我们的非存在的外观。
if (!mounted) return;
setState(() {
_status = status;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Center(
child: Text('状态: $_status\n'),
),
),
);
}
}
更多关于Flutter健康数据访问插件flutter_health_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter健康数据访问插件flutter_health_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_health_kit
插件来访问健康数据的示例代码。flutter_health_kit
插件允许你读取和写入用户的健康数据,如步数、心率、睡眠质量等。
前提条件
- 确保你的Flutter环境已经设置好。
- 在你的
pubspec.yaml
文件中添加flutter_health_kit
依赖:
dependencies:
flutter:
sdk: flutter
flutter_health_kit: ^x.y.z # 请替换为最新版本号
- 运行
flutter pub get
来安装依赖。
配置Android和iOS
Android
- 在
android/app/src/main/AndroidManifest.xml
中添加必要的权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="android.permission.BODY_SENSORS"/>
<!-- 其他必要的权限 -->
<application
... >
<!-- 其他配置 -->
</application>
</manifest>
- 在
android/app/build.gradle
文件中设置最低SDK版本为21(或更高):
android {
compileSdkVersion 30
defaultConfig {
applicationId "com.example.yourapp"
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"
}
...
}
iOS
- 在
ios/Runner/Info.plist
中添加必要的权限描述:
<key>NSHealthShareUsageDescription</key>
<string>Your app needs access to HealthKit to read your health data.</string>
<key>NSHealthUpdateUsageDescription</key>
<string>Your app needs access to HealthKit to save your health data.</string>
- 在Xcode中,确保你的项目已经启用了HealthKit功能。在
Signing & Capabilities
标签页中,添加HealthKit
。
代码示例
以下是一个简单的Flutter应用示例,展示如何使用flutter_health_kit
插件读取步数数据:
import 'package:flutter/material.dart';
import 'package:flutter_health_kit/flutter_health_kit.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<HealthDataPoint> _stepsData = [];
@override
void initState() {
super.initState();
_requestHealthData();
}
Future<void> _requestHealthData() async {
// 请求步数数据权限
bool isAuthorized = await FlutterHealthKit.instance.requestAuthorization(
[
HealthDataType.steps,
],
);
if (isAuthorized) {
// 读取步数数据
final HealthDataQuery query = HealthDataQuery(
startDate: DateTime.now().subtract(Duration(days: 7)),
endDate: DateTime.now(),
dataTypes: [HealthDataType.steps],
);
final List<HealthDataPoint> results =
await FlutterHealthKit.instance.query(query);
setState(() {
_stepsData = results;
});
} else {
print("用户未授权访问健康数据");
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Health Kit Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'最近7天的步数数据:',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 16),
Expanded(
child: ListView.builder(
itemCount: _stepsData.length,
itemBuilder: (context, index) {
final HealthDataPoint point = _stepsData[index];
return ListTile(
title: Text('日期: ${point.startDate.toLocal()}'),
subtitle: Text('步数: ${point.value.toDouble()}'),
);
},
),
),
],
),
),
),
);
}
}
解释
- 请求权限:使用
FlutterHealthKit.instance.requestAuthorization
方法请求访问步数数据的权限。 - 查询数据:使用
FlutterHealthKit.instance.query
方法查询过去7天的步数数据。 - 显示数据:使用
ListView.builder
将查询到的步数数据展示出来。
这个示例展示了基本的健康数据访问流程。你可以根据需要扩展代码,以支持更多的数据类型和功能。