From 21b2fae806080a68b918463eae9d2a901d52a207 Mon Sep 17 00:00:00 2001 From: "taha.alam" Date: Thu, 16 Jan 2025 12:29:35 +0300 Subject: [PATCH] WD: vital sign changes --- android/build.gradle | 4 +- android/settings.gradle | 2 + lib/pages/landing/widgets/services_view.dart | 16 +++-- lib/vital_signs/vital_sign.dart | 72 ++++++++++++++++++++ pubspec.yaml | 2 + 5 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 lib/vital_signs/vital_sign.dart diff --git a/android/build.gradle b/android/build.gradle index cc067af7..532ac03d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -19,8 +19,8 @@ buildscript { credentials { username = 'mapbox' -// password = "sk.eyJ1IjoicndhaWQiLCJhIjoiY2x6NWo0bTMzMWZodzJrcGZpemYzc3Z4dSJ9.uSSZuwNSGCcCdPAiORECmg" - password = "pk.eyJ1IjoicndhaWQiLCJhIjoiY2x5cGo4aHNjMGNsbTJyc2djempobGQxaSJ9.RCaC6WrUt4A4YnZNfxnONQ" + password = "sk.eyJ1IjoicndhaWQiLCJhIjoiY2x6NWo0bTMzMWZodzJrcGZpemYzc3Z4dSJ9.uSSZuwNSGCcCdPAiORECmg" +// password = "pk.eyJ1IjoicndhaWQiLCJhIjoiY2x5cGo4aHNjMGNsbTJyc2djempobGQxaSJ9.RCaC6WrUt4A4YnZNfxnONQ" if (password == null || password == "") { throw new GradleException("MAPBOX_DOWNLOADS_TOKEN isn't set. Set it to the project properties or to the enviroment variables.") } diff --git a/android/settings.gradle b/android/settings.gradle index 5a2f14fb..202891d9 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,4 +1,6 @@ include ':app' +include ':vital-sign-engine' +project(':vital-sign-engine').projectDir = new File('C:\\Users\\taha.alam\\AndroidStudioProjects\\diplomatic-quarter\\packages\\vital_sign_camera') def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() diff --git a/lib/pages/landing/widgets/services_view.dart b/lib/pages/landing/widgets/services_view.dart index b336887e..b76cf82c 100644 --- a/lib/pages/landing/widgets/services_view.dart +++ b/lib/pages/landing/widgets/services_view.dart @@ -41,6 +41,7 @@ import 'package:diplomaticquarterapp/uitl/penguin_method_channel.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart'; +import 'package:diplomaticquarterapp/vital_signs/vital_sign.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/covid_consent_dialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/location_selection_dialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/radio_selection_dialog.dart'; @@ -229,13 +230,16 @@ class ServicesView extends StatelessWidget { } else if (hmgServices.action == 1) { openLiveCare(context); } else if (hmgServices.action == 2) { + //todo for temporary basis + Navigator.push(context, FadePage(page: VitalSigns())); + // initPenguinSDK(); - if (projectViewModel.isIndoorNavigationEnabled) { - if (!isLocked) openNavigationProjectSelection(context); - } else { - Navigator.push(context, FadePage(page: ErOptions(isAppbar: true))); - locator().hmgServices.logServiceName('emergency service'); - } + // if (projectViewModel.isIndoorNavigationEnabled) { + // if (!isLocked) openNavigationProjectSelection(context); + // } else { + // Navigator.push(context, FadePage(page: ErOptions(isAppbar: true))); + // locator().hmgServices.logServiceName('emergency service'); + // } } else if (hmgServices.action == 3) { Navigator.push(context, FadePage(page: HomeHealthCarePage())); locator().hmgServices.logServiceName('home health care'); diff --git a/lib/vital_signs/vital_sign.dart b/lib/vital_signs/vital_sign.dart new file mode 100644 index 00000000..8a58aa73 --- /dev/null +++ b/lib/vital_signs/vital_sign.dart @@ -0,0 +1,72 @@ +import 'package:flutter/material.dart'; +import 'package:vital_sign_camera/vital_sign_camera.dart'; + +class VitalSigns extends StatefulWidget { + const VitalSigns({super.key}); + + @override + State createState() => _VitalSignState(); +} + +class _VitalSignState extends State { + late final VitalSignCameraController _vitalSignCameraController; + late Future cameraDevice; + + @override + void initState() { + super.initState(); + cameraDevice = getFrontCamera(); + } + + double? _heartRate; + + Future getFrontCamera() async { + if (CameraPermissionStatus.authorized != await requestCameraPermission()) { + return null; + } + return queryCameraDevice(CameraPosition.front); + } + + @override + Widget build(BuildContext context) { + return MaterialApp( + home: Scaffold( + body: Stack(children: [ + VitalSignCamera( + onCreated: _onVitalSignCameraCreated, + isActive: true, + userInfo: UserInfo( + age: 30, gender: Gender.male, userId: '__YOUR_USER_ID__'), + config: VitalSignCameraConfig(apiKey: '__YOUR_API_KEY__'), + device: cameraDevice, + onVideoFrameProcessed: _onVideoFrameProcessed), + Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ElevatedButton( + onPressed: () { + setState(() { + _vitalSignCameraController.startScanning(); + }); + }, + child: const Text('start')), + Text('Heart rate: $_heartRate'), + ], + ), + ), + ]), + ), + ); + } + + void _onVideoFrameProcessed(VideoFrameProcessedEvent event) { + setState(() { + _heartRate = event.healthResult?.health?.vitalSigns.heartRate; + }); + } + + void _onVitalSignCameraCreated(VitalSignCameraController controller) { + _vitalSignCameraController = controller; + } +} \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index 92e358ca..0293b2cf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -187,6 +187,8 @@ dependencies: firebase_crashlytics: ^3.0.0 cloudflare_turnstile: ^2.0.1 + vital_sign_camera: + path: ./packages/vital_sign_camera dependency_overrides: