Flutter健康数据访问插件flutter_health_kit的使用

发布于 1周前 作者 sinazl 来自 Flutter

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插件允许你读取和写入用户的健康数据,如步数、心率、睡眠质量等。

前提条件

  1. 确保你的Flutter环境已经设置好。
  2. 在你的pubspec.yaml文件中添加flutter_health_kit依赖:
dependencies:
  flutter:
    sdk: flutter
  flutter_health_kit: ^x.y.z  # 请替换为最新版本号
  1. 运行flutter pub get来安装依赖。

配置Android和iOS

Android

  1. 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>
  1. android/app/build.gradle文件中设置最低SDK版本为21(或更高):
android {
    compileSdkVersion 30

    defaultConfig {
        applicationId "com.example.yourapp"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
    }
    ...
}

iOS

  1. 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>
  1. 在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()}'),
                    );
                  },
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

解释

  1. 请求权限:使用FlutterHealthKit.instance.requestAuthorization方法请求访问步数数据的权限。
  2. 查询数据:使用FlutterHealthKit.instance.query方法查询过去7天的步数数据。
  3. 显示数据:使用ListView.builder将查询到的步数数据展示出来。

这个示例展示了基本的健康数据访问流程。你可以根据需要扩展代码,以支持更多的数据类型和功能。

回到顶部