Flutter 快速入门指南
快速入门 Flutter SDK 最简单的方法是下载并试用我们的 示例程式码。此外,您还可以按照本快速入门指南,快速建立您的首个 Flutter 健康测评应用程式。
完成本指南后,我们强烈建议您遵循我们的 软体开发指南,以确保 Vitals™ SDK 产生的健康测评结果准确可靠。
SDK Installation
请按照 下载 页面中的说明安装 Flutter SDK 并将其整合到您的专案中。
设定相机
如 整合 Vitals™ 健康测评(VHA) 中所述,第一步是设定相机。首先,建立一个新专案并按照以下说明操作。
相机权限
在开发 iOS 或 Android 应用程式时,您需要在 Info.plist 档案中(iOS 系统)和 AndroidManifest.xml 档案中(Android 系统)指定以下内容,以允许应用程式使用相机:
<key>NSCameraUsageDescription</key>
<string>Use for measuring vital signs</string><uses-permission android:name="android.permission.CAMERA" />TIP 提示
在 Info.plist 中,字串 "Use for measuring vital signs" 是相机用途的范例描述。您应该根据应用的用途指定您自己的描述。
Vital Sign Camera
如 Vital Sign Camera 中所述,在 Vitals™ SDK 中,我们提供了一个名为 VitalSignCamera 的特制相机组件。要设定它,请在 App.tsx 档案中宣告 VitalSignCamera 元素。例如:
import 'package:flutter/material.dart';
import 'package:vital_sign_camera/vital_sign_camera.dart';
void main() {
runApp(const MainApp());
}
class MainApp extends StatefulWidget {
const MainApp({super.key});
@override
State<MainApp> createState() => _MainAppState();
}
/* Vitals™ 雲端服務配置 */
final VitalSignCameraConfig config = VitalSignCameraConfig(
apiKey: '__YOUR_API_KEY__',
);
class _MainAppState extends State<MainApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: VitalSignCamera(
isActive: true,
config: config,
)
),
);
}
}您将看到一个关于缺少 userInfo 参数的错误。不用担心,我们将在下一节中修复这个问题。
TIP 提示
在上述范例中,字串 __YOUR_API_KEY__ 应替换为您自己的 API 金钥。请联络我们以取得您的 API 金钥,它是存取 Vitals™ 云端服务的凭证。
有关系统和相机设定的更多详细信息,请参阅 设定相机。
获取用户健康档案
正如 整合 Vitals™ 健康测评(VHA) 中所述,我们必须收集用户的健康档案和病史数据,才能获得个人化的健康测评结果并提高测评的准确性。
首先,使用您收集到的使用者资讯建立一个 UserInfo 物件。
final UserInfo userInfo = UserInfo(
age: 30,
gender: Gender.male,
userId: '__YOUR_USER_ID__',
);您可以将用户健康档案提供给 VitalSignCamera 元件中的 userInfo 属性。
VitalSignCamera(
isActive: true,
userInfo: userInfo,
config: config,
)运行应用程式,您现在应该能够看到相机预览。
TIP 提示
在上面的范例中,字串__YOUR_USER_ID__应替换为您自己的使用者 ID。请联络我们以取得您的使用者 ID,该 ID 指定了 Vitals™ 云端服务的订阅方案。扫描所获得的生命体征会因订阅方案而异,每个方案都提供一组独特的生命体征。
更多详细信息,请参阅 获取用户健康档案 页面。
扫描生命体征
要开始扫描,您只需呼叫 VitalSignCameraController 元件的 startScanning() API 即可。
首先,建立一个类型为 VitalSignCameraController 的属性:
class _MainAppState extends State<MainApp> {
late final VitalSignCameraController _vitalSignCameraController;
// ...
}然后建立一个名为 onVitalSignCameraCreated 的函式来初始化 _vitalSignCameraController 属性:
void _onVitalSignCameraCreated(VitalSignCameraController controller) {
_vitalSignCameraController = controller;
}将 _onVitalSignCameraCreated 函数指定给 VitalSignCamera 的 onCreated 参数:
VitalSignCamera(
onCreated: _onVitalSignCameraCreated,
// ...
)新增一个开始按钮,并呼叫 startScanning() API,例如:
ElevatedButton(
onPressed: () {
setState(() {
_vitalSignCameraController.startScanning();
});
},
child: const Text('开始扫描'),
)呼叫 API 后,元件将开始透过相机扫描人脸,持续时间为 30 秒。扫描成功后,将传回生命体征讯息。您可以透过 onVideoFrameProcessed 回呼函数记录扫描进度并观察任何错误。此回调函数以每秒 30Hz 的频率(此频率取决于相机的帧率)传回处理结果。
VitalSignCamera(
// ...
onVideoFrameProcessed: _onVideoFrameProcessed,
),定义 _onVideoFrameProcessed 函数来列印扫描进度:
void _onVideoFrameProcessed(VideoFrameProcessedEvent event) {
/* 如果扫描正在进行,则列印扫描阶段和剩余秒数。 */
if (event.healthResult?.stage != GetHealthStage.idle) {
print('扫描阶段=${event.healthResult?.stage}, 剩余秒数=${event.healthResult?.remainingTime}');
}
/* 若有错误则列印 */
if (event.healthResult?.error != null) {
print('错误=${event.healthResult?.error}');
}
}运行应用程式,将你的脸部置于相机预览的中央,点击“开始扫描”按钮。将你的脸部移出相机预览范围,模拟「人脸遗失」错误。你应该在Logcat中看到类似这样的内容:
flutter: 扫描阶段=GetHealthStage.collectingData, 剩余秒数=22.315261960029602
flutter: 扫描阶段=GetHealthStage.collectingData, 剩余秒数=22.282362937927246
flutter: 错误=face lost
flutter: 错误=face lost有关处理扫描过程的更多详细信息,请参阅 扫描生命体征 页面。
取得并显示健康测评结果
VitalSignCamera 组件会透过 onVideoFrameProcessed 回呼函数传回健康测评结果。在下面的示例程式码中,它会检查心率是否已准备好,并在准备好后将其显示在控制台中。
/* 更新了 onVideoFrameProcessed 回呼函数 */
void _onVideoFrameProcessed(VideoFrameProcessedEvent event) {
// ...
/* 取得心率结果 */
if (event.healthResult?.health != null) {
print('心率=${event.healthResult?.health?.vitalSigns.heartRate}');
}
}运行应用程式并进行扫描,30秒后,您将能够看到以下心率结果:
I/flutter (14005): 扫描阶段=GetHealthStage.analyzingData, 剩余秒数=0.06799983978271484
I/flutter (14005): 扫描阶段=GetHealthStage.analyzingData, 剩余秒数=0.032000064849853516
I/flutter (14005): 心率=55.21213462445704
I/flutter (14005): 心率=55.21213462445704Vitals™ SDK 中提供了更多生命体征测评结果,我们也提供了测评结果的解读指南。更多信息,请参阅 取得并显示健康测评结果 页面。
🎉🎉🎉 恭喜! 🎉🎉🎉
您已完成您的第一个 Vitals™ 应用程式!