From 4ec93e8609e581823939e01199f1fd2db0b42b03 Mon Sep 17 00:00:00 2001 From: Faiz Hashmi Date: Wed, 1 May 2024 17:43:14 +0300 Subject: [PATCH] Completed the flow --- .../diplomaticquarterapp/ble/BleBridge.kt | 52 ++- .../andesfit_all_in-one_connect_screen.dart | 15 +- .../ble_devices_screen.dart | 15 +- .../checkme_all_in_one_info_screen.dart | 294 +++++++++++++++ .../ble_helpers/ble_connect_helper.dart | 60 +++ .../check_me_info_model.dart | 0 .../my_trackers_view_model.dart | 346 +++++++++++------- 7 files changed, 630 insertions(+), 152 deletions(-) create mode 100644 lib/pages/medical/my_trackers/ble_device_type_screens/checkme_all_in_one_info_screen.dart rename lib/pages/medical/my_trackers/ble_models/{andesfit_devices/all_in_one_monitor => checkmepro_all_in_one_models}/check_me_info_model.dart (100%) diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/ble/BleBridge.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/ble/BleBridge.kt index 36d8b4bf..51e1f60d 100644 --- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/ble/BleBridge.kt +++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/ble/BleBridge.kt @@ -85,7 +85,6 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi private const val STOP_SCAN = "stopScan" private const val STOP_SCAN_CHECK_ME = "stopScanCheckMe" private const val CONNECT_DEVICE = "connectDevice" - private const val CONNECT_DEVICE_CHECK_ME = "connectDeviceCheckMe" private const val SCAN_DEVICE_EKG = "scan_ekg" private const val EKG_FILES_LIST = "ecgFilesList" private const val FACTORY_RESET_ECG = "factoryResetECG" @@ -93,8 +92,14 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi private const val DISCONNECT_DEVICE = "disconnectDevice" private const val DISCONNECT_CHECK_ME = "disconnectCheckMe" private const val READ_USER_CHECK_ME_PRO = "readUserCheckMePro" - private const val GET_DEVICE_INFO_CHECK_ME_PRO = "getDeviceInfoCheckMePro" private const val SCAN_FOR_CHECK_ME_PRO = "scanForCheckMePro" + private const val CONNECT_DEVICE_CHECK_ME = "connectDeviceCheckMe" + private const val GET_BP_DATA_CHECK_ME_PRO = "getBPDataFromCheckMePro" + private const val GET_OXI_DATA_CHECK_ME_PRO = "getOxiDataFromCheckMePro" + private const val GET_TEMP_DATA_CHECK_ME_PRO = "getTempDataFromCheckMePro" + private const val GET_ECG_DATA_CHECK_ME_PRO = "getEcgDataFromCheckMePro" + private const val GET_GLUCOSE_DATA_CHECK_ME_PRO = "getGlucoseDataFromCheckMePro" + val scan = BleScanManager() val dataScope = CoroutineScope(Dispatchers.IO) val uiScope = CoroutineScope(Dispatchers.Main) @@ -246,6 +251,16 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi connectDeviceCheckMe(methodCall.arguments as List) } else if (methodCall.method == DISCONNECT_CHECK_ME) { disConnectDeviceCheckMe() + } else if (methodCall.method == GET_BP_DATA_CHECK_ME_PRO) { + getBPDataFromCheckMePro(methodCall.arguments as String); + } else if (methodCall.method == GET_GLUCOSE_DATA_CHECK_ME_PRO) { + getGlucoseDataFromCheckMePro(methodCall.arguments as String) + } else if (methodCall.method == GET_OXI_DATA_CHECK_ME_PRO) { + getOxyDataFromCheckMePro() + } else if (methodCall.method == GET_ECG_DATA_CHECK_ME_PRO) { + getECGDataFromCheckMePro() + } else if (methodCall.method == GET_TEMP_DATA_CHECK_ME_PRO) { + getTemperatureDataFromCheckMePro() } else if (methodCall.method == SCAN_DEVICE_EKG) { // scanDeviceEKG(methodCall, result) } else if (methodCall.method == EKG_FILES_LIST) { @@ -258,8 +273,6 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi scanForCheckMePro(bleScanManager, scanResultHandler) } else if (methodCall.method == READ_USER_CHECK_ME_PRO) { - } else if (methodCall.method == GET_DEVICE_INFO_CHECK_ME_PRO) { - } else { result.notImplemented() } @@ -421,10 +434,14 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi val f = BpInfo(it) val json = gson.toJson(f.Bp) Log.d("BPMeter", json.toString()) + val returnData = mapOf("type" to "BPCheckMePro", "data" to json.toString()) + eventSink?.success(returnData) + } } } else { - // HANDLE FAILURE HERE WITH A GENERIC DATA MAP TO FLUTTER + val returnData = mapOf("type" to "FailureCheckMePro", "data" to "") + eventSink?.success(returnData) } } @@ -437,10 +454,14 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi val f = GluInfo(it) val json = gson.toJson(f.Glu) Log.d("BloodGlucoseMeter", json.toString()) + val returnData = mapOf("type" to "GlucoseCheckMePro", "data" to json.toString()) + eventSink?.success(returnData) + } } } else { - // HANDLE FAILURE HERE WITH A GENERIC DATA MAP TO FLUTTER + val returnData = mapOf("type" to "FailureCheckMePro", "data" to "") + eventSink?.success(returnData) } } @@ -454,10 +475,14 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi val f = OxyInfo(it) val json = gson.toJson(f.Oxy) Log.d("Oximeter", json.toString()) + val returnData = mapOf("type" to "OxiCheckMePro", "data" to json.toString()) + eventSink?.success(returnData) + } } } else { - // HANDLE FAILURE HERE WITH A GENERIC DATA MAP TO FLUTTER + val returnData = mapOf("type" to "FailureCheckMePro", "data" to "") + eventSink?.success(returnData) } } @@ -471,10 +496,15 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi val f = EcgInfo(it) val json = gson.toJson(f.ecg) Log.d("ECGMeter", json.toString()) + val returnData = mapOf("type" to "ECGCheckMePro", "data" to json.toString()) + + eventSink?.success(returnData) + } } } else { - // HANDLE FAILURE HERE WITH A GENERIC DATA MAP TO FLUTTER + val returnData = mapOf("type" to "FailureCheckMePro", "data" to "") + eventSink?.success(returnData) } } @@ -487,10 +517,14 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi val f = TmpInfo(it) val json = gson.toJson(f.Tmp) Log.d("TempMeter", json.toString()) + val returnData = mapOf("type" to "TemperatureCheckMePro", "data" to json.toString()) + eventSink?.success(returnData) + } } } else { - // HANDLE FAILURE HERE WITH A GENERIC DATA MAP TO FLUTTER + val returnData = mapOf("type" to "FailureCheckMePro", "data" to "") + eventSink?.success(returnData) } } diff --git a/lib/pages/medical/my_trackers/ble_device_type_screens/andesfit_device_types/andesfit_all_in-one_connect_screen.dart b/lib/pages/medical/my_trackers/ble_device_type_screens/andesfit_device_types/andesfit_all_in-one_connect_screen.dart index 818b4492..62830dd0 100644 --- a/lib/pages/medical/my_trackers/ble_device_type_screens/andesfit_device_types/andesfit_all_in-one_connect_screen.dart +++ b/lib/pages/medical/my_trackers/ble_device_type_screens/andesfit_device_types/andesfit_all_in-one_connect_screen.dart @@ -1,6 +1,8 @@ +import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_device_type_screens/ble_devices_screen.dart'; +import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_device_type_screens/checkme_all_in_one_info_screen.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/ble_devices_model.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/my_trackers_view_model/my_trackers_view_model.dart'; -import 'package:diplomaticquarterapp/uitl/utils_new.dart'; +import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/data_display/medical/medical_profile_item.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -65,16 +67,19 @@ class _AndesAllInOneConnectScreenState extends State switch (trackerTypeEnum) { case TrackerTypeEnum.BloodPressureTracker: case TrackerTypeEnum.BloodSugarTracker: - myTrackersViewModel.getCheckMeUsersListDialog(context); + myTrackersViewModel.getCheckMeUsersListDialog(trackerTypeEnum, context); break; case TrackerTypeEnum.OxymeterTracker: - // TODO: Handle this case. + myTrackersViewModel.getOxiDataFromCheckMePro(); + Navigator.of(context).push(FadePage(page: CheckMeAllInOneInfoScreen(trackerTypeEnum))); break; case TrackerTypeEnum.ECGTracker: - // TODO: Handle this case. + myTrackersViewModel.getECGDataFromCheckMePro(); + Navigator.of(context).push(FadePage(page: CheckMeAllInOneInfoScreen(trackerTypeEnum))); break; case TrackerTypeEnum.Temperature: - // TODO: Handle this case. + myTrackersViewModel.getTempDataFromCheckMePro(); + Navigator.of(context).push(FadePage(page: CheckMeAllInOneInfoScreen(trackerTypeEnum))); break; case TrackerTypeEnum.Spirometer: case TrackerTypeEnum.WeightScale: diff --git a/lib/pages/medical/my_trackers/ble_device_type_screens/ble_devices_screen.dart b/lib/pages/medical/my_trackers/ble_device_type_screens/ble_devices_screen.dart index 8c73703f..6aca3270 100644 --- a/lib/pages/medical/my_trackers/ble_device_type_screens/ble_devices_screen.dart +++ b/lib/pages/medical/my_trackers/ble_device_type_screens/ble_devices_screen.dart @@ -120,21 +120,8 @@ class _BleDevicesScreenState extends State { return; } - Permission.storage.isGranted.then((isGranted) { - log("isGranted: $isGranted"); + Navigator.pushReplacement(context, FadePage(page: AndesAllInOneConnectScreen(deviceModel: device))); - if (!isGranted) { - Permission.manageExternalStorage.request().then((granted) { - log("status: $granted"); - - if (granted == PermissionStatus.granted) { - Navigator.pushReplacement(context, FadePage(page: AndesAllInOneConnectScreen(deviceModel: device))); - } - }); - } else { - Navigator.pushReplacement(context, FadePage(page: AndesAllInOneConnectScreen(deviceModel: device))); - } - }); break; } } diff --git a/lib/pages/medical/my_trackers/ble_device_type_screens/checkme_all_in_one_info_screen.dart b/lib/pages/medical/my_trackers/ble_device_type_screens/checkme_all_in_one_info_screen.dart new file mode 100644 index 00000000..4e9d588f --- /dev/null +++ b/lib/pages/medical/my_trackers/ble_device_type_screens/checkme_all_in_one_info_screen.dart @@ -0,0 +1,294 @@ +import 'package:diplomaticquarterapp/config/size_config.dart'; +import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_bp_model.dart'; +import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_ecg_model.dart'; +import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_glucose_model.dart'; +import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_oxi_model.dart'; +import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_temperature_model.dart'; +import 'package:diplomaticquarterapp/pages/medical/my_trackers/my_trackers_view_model/my_trackers_view_model.dart'; +import 'package:diplomaticquarterapp/uitl/utils_new.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class CheckMeAllInOneInfoScreen extends StatelessWidget { + final TrackerTypeEnum allInOneTrackerTypeEnum; + + const CheckMeAllInOneInfoScreen(this.allInOneTrackerTypeEnum); + + String getTrackerNameByEnum(TrackerTypeEnum trackerTypeEnum) { + switch (trackerTypeEnum) { + case TrackerTypeEnum.OxymeterTracker: + return "Oxymeter"; + + case TrackerTypeEnum.BloodPressureTracker: + return "Blood Pressure"; + + case TrackerTypeEnum.BloodSugarTracker: + return "Blood Glucose"; + + case TrackerTypeEnum.ECGTracker: + return "ECG"; + + case TrackerTypeEnum.WeightScale: + return "Weight Scale"; + + case TrackerTypeEnum.Temperature: + return "Temperature"; + + case TrackerTypeEnum.Spirometer: + return "Spirometer"; + + case TrackerTypeEnum.AllInOneTracker: + return "All in One"; + } + return "All in One"; + } + + Widget getAllInOneOperationWidgets(MyTrackersViewModel myTrackersVm, TrackerTypeEnum trackerTypeEnum, BuildContext context) { + switch (trackerTypeEnum) { + case TrackerTypeEnum.OxymeterTracker: + return buildOxiWidget(myTrackersVm, context); + + case TrackerTypeEnum.BloodPressureTracker: + return buildBPWidget(myTrackersVm, context); + + case TrackerTypeEnum.BloodSugarTracker: + return buildGlucoseWidget(myTrackersVm, context); + + case TrackerTypeEnum.ECGTracker: + return buildECGWidget(myTrackersVm, context); + + case TrackerTypeEnum.Temperature: + return buildTemperatureWidget(myTrackersVm, context); + + case TrackerTypeEnum.Spirometer: + case TrackerTypeEnum.WeightScale: + case TrackerTypeEnum.AllInOneTracker: + return getNoDataWidget(context); + } + return getNoDataWidget(context); + } + + Widget buildTemperatureWidget(MyTrackersViewModel myTrackersVm, BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.max, + children: [ + if (myTrackersVm.filesLoader) ...[ + Center(child: CircularProgressIndicator()) + ] else if (myTrackersVm.checkMeTemperatures != null && myTrackersVm.checkMeTemperatures.isNotEmpty) ...[ + Material( + child: ListView.separated( + itemCount: myTrackersVm.checkMeTemperatures.length, + separatorBuilder: (context, index) => SizedBox(height: 14), + shrinkWrap: true, + reverse: false, + itemBuilder: (context, index) { + CheckMeTemperatureModel checkMeTemp = myTrackersVm.checkMeTemperatures[index]; + return InkWell( + onTap: () => Navigator.pop(context), + child: Container( + decoration: cardRadius(12), + padding: EdgeInsets.all(12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text("Temperature: ${checkMeTemp.tmp}"), + mHeight(4.0), + Text("Date: ${checkMeTemp.date}"), + ], + ), + ), + ); + }, + ), + ) + ] else ...[ + getNoDataWidget(context), + ] + ], + ); + } + + Widget buildECGWidget(MyTrackersViewModel myTrackersVm, BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.max, + children: [ + if (myTrackersVm.filesLoader) ...[ + Center(child: CircularProgressIndicator()) + ] else if (myTrackersVm.checkMeEcg != null && myTrackersVm.checkMeEcg.isNotEmpty) ...[ + Material( + child: ListView.separated( + itemCount: myTrackersVm.checkMeEcg.length, + separatorBuilder: (context, index) => SizedBox(height: 14), + shrinkWrap: true, + reverse: false, + itemBuilder: (context, index) { + CheckMeECGModel checkMeECGModel = myTrackersVm.checkMeEcg[index]; + return InkWell( + onTap: () => Navigator.pop(context), + child: Container( + decoration: cardRadius(12), + padding: EdgeInsets.all(12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text("Date: ${checkMeECGModel.date}"), + mHeight(4.0), + Text("way: ${checkMeECGModel.way}"), + ], + ), + ), + ); + }, + ), + ) + ] else ...[ + getNoDataWidget(context), + ] + ], + ); + } + + Widget buildOxiWidget(MyTrackersViewModel myTrackersVm, BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.max, + children: [ + if (myTrackersVm.filesLoader) ...[ + Center(child: CircularProgressIndicator()) + ] else if (myTrackersVm.checkMeOxi != null && myTrackersVm.checkMeOxi.isNotEmpty) ...[ + Material( + child: ListView.separated( + itemCount: myTrackersVm.checkMeOxi.length, + separatorBuilder: (context, index) => SizedBox(height: 14), + shrinkWrap: true, + reverse: false, + itemBuilder: (context, index) { + CheckMeOxiModel checkMeOxiModel = myTrackersVm.checkMeOxi[index]; + return InkWell( + onTap: () => Navigator.pop(context), + child: Container( + decoration: cardRadius(12), + padding: EdgeInsets.all(12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text("PR: ${checkMeOxiModel.pr} PI: ${checkMeOxiModel.pi}"), + mHeight(4.0), + Text("Oxi: ${checkMeOxiModel.oxy}"), + mHeight(4.0), + Text("Date: ${checkMeOxiModel.date}"), + ], + ), + ), + ); + }, + ), + ) + ] else ...[ + getNoDataWidget(context), + ] + ], + ); + } + + Widget buildBPWidget(MyTrackersViewModel myTrackersVm, BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.max, + children: [ + if (myTrackersVm.filesLoader) ...[ + Center(child: CircularProgressIndicator()) + ] else if (myTrackersVm.checkMeBP != null && myTrackersVm.checkMeBP.isNotEmpty) ...[ + Material( + child: ListView.separated( + itemCount: myTrackersVm.checkMeBP.length, + separatorBuilder: (context, index) => SizedBox(height: 14), + shrinkWrap: true, + reverse: false, + itemBuilder: (context, index) { + CheckMeBPModel checkMeBPModel = myTrackersVm.checkMeBP[index]; + return InkWell( + onTap: () => Navigator.pop(context), + child: Container( + decoration: cardRadius(12), + padding: EdgeInsets.all(12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text("DIA: ${checkMeBPModel.dia} SYS: ${checkMeBPModel.sys}"), + mHeight(4.0), + Text("PR: ${checkMeBPModel.pr}"), + mHeight(4.0), + Text("Date: ${checkMeBPModel.date}"), + ], + ), + ), + ); + }, + ), + ) + ] else ...[ + getNoDataWidget(context), + ] + ], + ); + } + + Widget buildGlucoseWidget(MyTrackersViewModel myTrackersVm, BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.max, + children: [ + if (myTrackersVm.filesLoader) ...[ + Center(child: CircularProgressIndicator()) + ] else if (myTrackersVm.checkMeGlucose != null && myTrackersVm.checkMeGlucose.isNotEmpty) ...[ + Material( + child: ListView.separated( + itemCount: myTrackersVm.checkMeGlucose.length, + separatorBuilder: (context, index) => SizedBox(height: 14), + shrinkWrap: true, + reverse: false, + itemBuilder: (context, index) { + CheckMeGlucoseModel checkMeGlucoseModel = myTrackersVm.checkMeGlucose[index]; + return InkWell( + onTap: () => Navigator.pop(context), + child: Container( + decoration: cardRadius(12), + padding: EdgeInsets.all(12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text("Glucose: ${checkMeGlucoseModel.glu}"), + mHeight(4.0), + Text("Date: ${checkMeGlucoseModel.date}"), + ], + ), + ), + ); + }, + ), + ) + ] else ...[ + getNoDataWidget(context), + ] + ], + ); + } + + @override + Widget build(BuildContext context) { + return AppScaffold( + appBarTitle: "${getTrackerNameByEnum(allInOneTrackerTypeEnum)}", + showNewAppBar: true, + isShowDecPage: false, + showNewAppBarTitle: true, + backgroundColor: Color(0xffF8F8F8), + body: Padding( + padding: const EdgeInsets.all(24.0), + child: Consumer( + builder: (BuildContext context, MyTrackersViewModel myTrackersVm, Widget child) { + return getAllInOneOperationWidgets(myTrackersVm, allInOneTrackerTypeEnum, context); + }, + ), + ), + ); + } +} diff --git a/lib/pages/medical/my_trackers/ble_helpers/ble_connect_helper.dart b/lib/pages/medical/my_trackers/ble_helpers/ble_connect_helper.dart index 1e92c67f..4d704a6a 100644 --- a/lib/pages/medical/my_trackers/ble_helpers/ble_connect_helper.dart +++ b/lib/pages/medical/my_trackers/ble_helpers/ble_connect_helper.dart @@ -146,4 +146,64 @@ class BleChannel { return "Error: $e"; } } + + static Future getGlucoseDataFromCheckMePro(String userId) async { + try { + print("----------Flutter getDeviceInfoCheckMePro -------"); + final String result = await platform.invokeMethod('getGlucoseDataFromCheckMePro', userId); + print("----------Flutter getDeviceInfoCheckMePro result -------"); + print(result); + return result; + } catch (e) { + return "Error: $e"; + } + } + + static Future getBPDataFromCheckMePro(String userId) async { + try { + print("----------Flutter getBPDataFromCheckMePro -------"); + final String result = await platform.invokeMethod('getBPDataFromCheckMePro', userId); + print("----------Flutter getBPDataFromCheckMePro result -------"); + print(result); + return result; + } catch (e) { + return "Error: $e"; + } + } + + static Future getOxiDataFromCheckMePro() async { + try { + print("----------Flutter getOxiDataFromCheckMePro -------"); + final String result = await platform.invokeMethod('getOxiDataFromCheckMePro'); + print("----------Flutter getOxiDataFromCheckMePro result -------"); + print(result); + return result; + } catch (e) { + return "Error: $e"; + } + } + + static Future getTempDataFromCheckMePro() async { + try { + print("----------Flutter getTempDataFromCheckMePro -------"); + final String result = await platform.invokeMethod('getTempDataFromCheckMePro'); + print("----------Flutter getTempDataFromCheckMePro result -------"); + print(result); + return result; + } catch (e) { + return "Error: $e"; + } + } + + static Future getEcgDataFromCheckMePro() async { + try { + print("----------Flutter getEcgDataFromCheckMePro -------"); + final String result = await platform.invokeMethod('getEcgDataFromCheckMePro'); + print("----------Flutter getDeviceInfoCheckMePro result -------"); + print(result); + return result; + } catch (e) { + return "Error: $e"; + } + } } diff --git a/lib/pages/medical/my_trackers/ble_models/andesfit_devices/all_in_one_monitor/check_me_info_model.dart b/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/check_me_info_model.dart similarity index 100% rename from lib/pages/medical/my_trackers/ble_models/andesfit_devices/all_in_one_monitor/check_me_info_model.dart rename to lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/check_me_info_model.dart diff --git a/lib/pages/medical/my_trackers/my_trackers_view_model/my_trackers_view_model.dart b/lib/pages/medical/my_trackers/my_trackers_view_model/my_trackers_view_model.dart index 187bb283..31d491c2 100644 --- a/lib/pages/medical/my_trackers/my_trackers_view_model/my_trackers_view_model.dart +++ b/lib/pages/medical/my_trackers/my_trackers_view_model/my_trackers_view_model.dart @@ -2,10 +2,14 @@ import 'dart:async'; import 'dart:convert'; import 'dart:developer'; import 'package:diplomaticquarterapp/config/size_config.dart'; -import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/andesfit_devices/all_in_one_monitor/check_me_info_model.dart'; -import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/andesfit_devices/bt_constants.dart'; +import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_device_type_screens/checkme_all_in_one_info_screen.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/andesfit_devices/weight_data_model.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/ble_devices_model.dart'; +import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_bp_model.dart'; +import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_ecg_model.dart'; +import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_glucose_model.dart'; +import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_oxi_model.dart'; +import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_temperature_model.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_user_model.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/viatom_devices/bp_rt_model.dart'; import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/viatom_devices/ecg_file_detail_model.dart'; @@ -16,7 +20,6 @@ import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/ble_utils.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart'; -import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/services.dart'; import 'package:flutter/cupertino.dart'; @@ -34,12 +37,17 @@ String kRealTimeDataBPMeasuring = "RealTimeDataBPMeasuring"; String kRealTimeDataBPResult = "RealTimeDataBPResult"; String kOxyRtParam = "OxyRtParam"; String kDevicesList = "DevicesList"; -String kDevicesListCheckMe = "DevicesListCheckMe"; -String kCheckMeUsersList = "CheckMeUsersList"; String kRealTimeDataECGMeasuring = "RealTimeDataECGMeasuring"; // This is for the device that measures BP and ECG also Like BP2 0567 String kRealTimeDataECGResult = "RealTimeDataECGResult"; String kRealTimeDataECG = "RealTimeDataECG"; String kFileDetail = "FileDetail"; +String kDevicesListCheckMe = "DevicesListCheckMe"; +String kCheckMeUsersList = "CheckMeUsersList"; +String kTemperatureCheckMePro = "TemperatureCheckMePro"; +String kECGCheckMePro = "ECGCheckMePro"; +String kOxiCheckMePro = "OxiCheckMePro"; +String kGlucoseCheckMePro = "GlucoseCheckMePro"; +String kBPCheckMePro = "BPCheckMePro"; class MyTrackersViewModel extends ChangeNotifier { EventChannel eventChannel = EventChannel('BLE-Platform-Bridge-Event'); @@ -222,102 +230,6 @@ class MyTrackersViewModel extends ChangeNotifier { notifyListeners(); } - List checkMeProUsersList; - - void updateCheckMeUserInfoModel(List returnData) { - if (checkMeProUsersList != null) { - checkMeProUsersList.clear(); - } - checkMeProUsersList = List.generate(returnData.length, (index) => CheckMeUserInfoModel.fromJson(jsonDecode(returnData[index]))); - - notifyListeners(); - } - - getCheckMeUsersListDialog(BuildContext context) { - return showDialog( - context: context, - builder: (context) => Container( - decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(15)), color: Colors.white), - padding: const EdgeInsets.all(20), - margin: const EdgeInsets.symmetric(vertical: 35, horizontal: 30), - child: SingleChildScrollView( - child: Consumer(builder: (BuildContext context, MyTrackersViewModel myTrackersVm, Widget child) { - return Column( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Material( - child: Center( - child: Text( - "Users List", - style: TextStyle( - fontSize: SizeConfig.textMultiplier * 1.8, - fontWeight: FontWeight.w600, - letterSpacing: -0.3, - height: 13 / 10, - ), - ), - ), - ), - if (myTrackersVm.filesLoader) ...[ - Center(child: CircularProgressIndicator()) - ] else if (myTrackersVm.checkMeProUsersList != null && myTrackersVm.checkMeProUsersList.isNotEmpty) ...[ - Material( - child: SizedBox( - height: MediaQuery.of(context).size.height * 0.7, - child: ListView.separated( - itemCount: checkMeProUsersList.length, - separatorBuilder: (context, index) => SizedBox(height: 14), - shrinkWrap: true, - reverse: false, - itemBuilder: (context, index) { - CheckMeUserInfoModel userModel = checkMeProUsersList[index]; - return InkWell( - onTap: () => Navigator.pop(context), - child: Container( - decoration: cardRadius(12), - padding: EdgeInsets.all(12.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text("${userModel.id}. ${userModel.name}"), - mHeight(4.0), - Text("Gender: ${userModel.sex == 1 ? "Female" : "Male"}"), - mHeight(4.0), - Text("Height: ${userModel.height}"), - mHeight(4.0), - Text("Weight: ${userModel.height}"), - ], - ), - ), - ); - }, - ), - ), - ) - ] else ...[ - Material( - child: Center( - child: Text( - "No Users to show", - style: TextStyle( - fontSize: SizeConfig.textMultiplier * 1.6, - fontWeight: FontWeight.w600, - letterSpacing: -0.3, - height: 13 / 10, - ), - ), - ), - ), - ] - ], - ); - }), - ), - ), - ); - } - Widget getFilesListWidget(List filesList, BuildContext context) { return Material( child: SizedBox( @@ -412,25 +324,6 @@ class MyTrackersViewModel extends ChangeNotifier { }); } - Future startSearchingForCheckMePro() async { - log("selectedTracker in startSearchingForCheckMePro: ${currentSelectedTrackerType.name}"); - await checkBLEPermissions(); - eventChannel.receiveBroadcastStream().listen((event) { - print('Received event---: $event'); - print(event['type']); - if (event['type'] == kDevicesListCheckMe) { - List list = [json.decode(event['data'])]; - parsesDevicesList(list); - } - - if (event['type'] == kCheckMeUsersList) { - updateCheckMeUserInfoModel(event['data']); - } - }); - - await scanForCheckMe(); - } - Future startSearchingForTracker() async { log("selectedTracker: ${currentSelectedTrackerType.name}"); @@ -532,10 +425,6 @@ class MyTrackersViewModel extends ChangeNotifier { await BleChannel.scanResultsNative([currentSelectedTrackerType.name]); } - Future scanForCheckMe() async { - await BleChannel.scanCheckMeProNative(); - } - Future stopNativeScan() async { await BleChannel.stopNativeScan(); } @@ -1197,4 +1086,213 @@ class MyTrackersViewModel extends ChangeNotifier { //// --> CHECK ME PRO + Future scanForCheckMe() async { + await BleChannel.scanCheckMeProNative(); + } + + Future startSearchingForCheckMePro() async { + log("selectedTracker in startSearchingForCheckMePro: ${currentSelectedTrackerType.name}"); + await checkBLEPermissions(); + eventChannel.receiveBroadcastStream().listen((event) { + print('Received event---: $event'); + print(event['type']); + if (event['type'] == kDevicesListCheckMe) { + List list = [json.decode(event['data'])]; + parsesDevicesList(list); + } + if (event['type'] == kCheckMeUsersList) { + updateCheckMeUserInfoModel(event['data']); + } + if (event['type'] == kTemperatureCheckMePro) { + updateCheckMeTemperatureInfoModel(json.decode(event['data'])); + } + if (event['type'] == kECGCheckMePro) { + updateCheckMeEcgInfoModel(json.decode(event['data'])); + } + if (event['type'] == kBPCheckMePro) { + updateCheckMeBPInfoModel(json.decode(event['data'])); + } + if (event['type'] == kOxiCheckMePro) { + updateCheckMeOxiInfoModel(json.decode(event['data'])); + } + if (event['type'] == kGlucoseCheckMePro) { + updateCheckMeGlucoseInfoModel(json.decode(event['data'])); + } + }); + + await scanForCheckMe(); + } + + List checkMeProUsersList; + + void updateCheckMeUserInfoModel(List returnData) { + if (checkMeProUsersList != null) { + checkMeProUsersList.clear(); + } + checkMeProUsersList = List.generate(returnData.length, (index) => CheckMeUserInfoModel.fromJson(jsonDecode(returnData[index]))); + + notifyListeners(); + } + + getCheckMeUsersListDialog(TrackerTypeEnum trackerTypeEnum, BuildContext context) { + return showDialog( + context: context, + builder: (context) => Container( + decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(15)), color: Colors.white), + padding: const EdgeInsets.all(20), + margin: const EdgeInsets.symmetric(vertical: 35, horizontal: 30), + child: SingleChildScrollView( + child: Consumer(builder: (BuildContext context, MyTrackersViewModel myTrackersVm, Widget child) { + return Column( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Material( + child: Center( + child: Text( + "Users List", + style: TextStyle( + fontSize: SizeConfig.textMultiplier * 1.8, + fontWeight: FontWeight.w600, + letterSpacing: -0.3, + height: 13 / 10, + ), + ), + ), + ), + if (myTrackersVm.filesLoader) ...[ + Center(child: CircularProgressIndicator()) + ] else if (myTrackersVm.checkMeProUsersList != null && myTrackersVm.checkMeProUsersList.isNotEmpty) ...[ + Material( + child: SizedBox( + height: MediaQuery.of(context).size.height * 0.7, + child: ListView.separated( + itemCount: checkMeProUsersList.length, + separatorBuilder: (context, index) => SizedBox(height: 14), + shrinkWrap: true, + reverse: false, + itemBuilder: (context, index) { + CheckMeUserInfoModel userModel = checkMeProUsersList[index]; + return InkWell( + onTap: () { + if (trackerTypeEnum == TrackerTypeEnum.BloodSugarTracker) { + myTrackersVm.getGlucoseDataFromCheckMePro(userModel.id); + } else if (trackerTypeEnum == TrackerTypeEnum.BloodPressureTracker) { + myTrackersVm.getBPDataFromCheckMePro(userModel.id); + } + Navigator.of(context).pushReplacement(FadePage(page: CheckMeAllInOneInfoScreen(trackerTypeEnum))); + }, + child: Container( + decoration: cardRadius(12), + padding: EdgeInsets.all(12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text("${userModel.id}. ${userModel.name}"), + mHeight(4.0), + Text("Gender: ${userModel.sex == 1 ? "Female" : "Male"}"), + mHeight(4.0), + Text("Height: ${userModel.height}"), + mHeight(4.0), + Text("Weight: ${userModel.height}"), + ], + ), + ), + ); + }, + ), + ), + ) + ] else ...[ + Material( + child: Center( + child: Text( + "No Users to show", + style: TextStyle( + fontSize: SizeConfig.textMultiplier * 1.6, + fontWeight: FontWeight.w600, + letterSpacing: -0.3, + height: 13 / 10, + ), + ), + ), + ), + ] + ], + ); + }), + ), + ), + ); + } + + Future getTempDataFromCheckMePro() async { + await BleChannel.getTempDataFromCheckMePro(); + } + + List checkMeTemperatures; + + void updateCheckMeTemperatureInfoModel(List returnData) { + if (checkMeTemperatures != null) { + checkMeTemperatures.clear(); + } + checkMeTemperatures = List.generate(returnData.length, (index) => CheckMeTemperatureModel.fromJson(returnData[index])); + notifyListeners(); + } + + Future getOxiDataFromCheckMePro() async { + await BleChannel.getOxiDataFromCheckMePro(); + } + + List checkMeOxi; + + void updateCheckMeOxiInfoModel(List returnData) { + if (checkMeOxi != null) { + checkMeOxi.clear(); + } + checkMeOxi = List.generate(returnData.length, (index) => CheckMeOxiModel.fromJson(returnData[index])); + notifyListeners(); + } + + Future getECGDataFromCheckMePro() async { + await BleChannel.getEcgDataFromCheckMePro(); + } + + List checkMeEcg; + + void updateCheckMeEcgInfoModel(List returnData) { + if (checkMeEcg != null) { + checkMeEcg.clear(); + } + checkMeEcg = List.generate(returnData.length, (index) => CheckMeECGModel.fromJson(returnData[index])); + notifyListeners(); + } + + Future getBPDataFromCheckMePro(String userId) async { + await BleChannel.getBPDataFromCheckMePro(userId); + } + + List checkMeBP; + + void updateCheckMeBPInfoModel(List returnData) { + if (checkMeBP != null) { + checkMeBP.clear(); + } + checkMeBP = List.generate(returnData.length, (index) => CheckMeBPModel.fromJson(returnData[index])); + notifyListeners(); + } + + Future getGlucoseDataFromCheckMePro(String userId) async { + await BleChannel.getGlucoseDataFromCheckMePro(userId); + } + + List checkMeGlucose; + + void updateCheckMeGlucoseInfoModel(List returnData) { + if (checkMeGlucose != null) { + checkMeGlucose.clear(); + } + checkMeGlucose = List.generate(returnData.length, (index) => CheckMeGlucoseModel.fromJson(returnData[index])); + notifyListeners(); + } }