Cardio Flutter
A Flutter package to measure heart rate, blood pressure, SpO2, respiratory rate, and HRV using your device camera.
Features
- Heart Rate — Real-time BPM with confidence level
- Blood Pressure — Systolic and diastolic readings (mmHg)
- Oxygen Saturation (SpO2) — Blood oxygen percentage
- Respiratory Rate — Breaths per minute
- Heart Rate Variability (HRV) — Stress and recovery indicator (ms)
- Dual Authentication — API Key or Access Token modes
- Cross-platform — Android and iOS
Installation
Add to your pubspec.yaml:
dependencies:
cardio_flutter: ^1.0.3
Then run:
flutter pub get
Platform Setup
Android
Add the following permissions to android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
iOS
The package fully supports iOS 11.0+ via WKWebView.
Add the following keys to ios/Runner/Info.plist:
<key>NSCameraUsageDescription</key>
<string>Camera access is required for cardiovascular health measurement</string>
<key>NSMicrophoneUsageDescription</key>
<string>Microphone access is required for cardiovascular health measurement</string>
<key>io.flutter.embedded_views_preview</key>
<true/>
Usage
API Key Mode
import 'package:cardio_flutter/cardio_flutter.dart';
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => CardioWebView(
apiKey: 'your-api-key',
appUserId: 'user-123',
organizationId: 'your-org-id', // optional in API key mode
),
),
);
Access Token Mode (Recommended for Production)
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => CardioWebView(
accessToken: 'your-access-token',
organizationId: 'your-org-id',
appUserId: 'user-123',
useAccessToken: true,
),
),
);
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
apiKey |
String? |
For API key mode | Your Cardio API key |
accessToken |
String? |
For token mode | Pre-fetched access token |
appUserId |
String |
Yes | Your app's user identifier |
organizationId |
String? |
For token mode | Organization ID |
useAccessToken |
bool |
No | Use access token auth (default: false) |
validateApiKey |
bool |
No | Validate API key on init (default: true) |
primaryColor |
Color? |
No | Override UI theme color (default: #317796) |
Result Model
The CardioResult model provides structured access to measurement data:
| Field | Type | Description |
|---|---|---|
heartRate |
int? |
Heart rate in BPM |
confidence |
String? |
Measurement confidence level |
systolicBp |
int? |
Systolic blood pressure (mmHg) |
diastolicBp |
int? |
Diastolic blood pressure (mmHg) |
spo2 |
int? |
Blood oxygen saturation (%) |
respiratoryRate |
int? |
Respiratory rate (breaths/min) |
hrv |
int? |
Heart rate variability (ms) |
Example
A complete example app is available in the example directory:
cd example
flutter run
License
See LICENSE file.
Libraries
- cardio_flutter
- Cardio Flutter - Flutter integration for Cardio SDK
- cardio_result_model
- cardio_webview