diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 359c2843..41ab6bf3 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -20,6 +20,9 @@
+
+
+
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 84bd9eb7..36d8b4bf 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
@@ -1,5 +1,6 @@
package com.cloud.diplomaticquarterapp.ble
+import TmpInfo
import android.annotation.SuppressLint
import android.bluetooth.BluetoothDevice
import android.os.Build
@@ -13,7 +14,6 @@ import android.util.SparseArray
import androidx.annotation.RequiresApi
import com.cloud.diplomaticquarterapp.ble.utils.EcgData
import com.cloud.diplomaticquarterapp.ble.utils.HexString
-import com.cloud.diplomaticquarterapp.check_me_pro.UiChannel
import com.cloud.diplomaticquarterapp.check_me_pro.bean.BleBean
import com.cloud.diplomaticquarterapp.check_me_pro.bean.UserBean
import com.cloud.diplomaticquarterapp.check_me_pro.ble.format.UserInfo
@@ -21,6 +21,12 @@ import com.cloud.diplomaticquarterapp.check_me_pro.ble.manager.BleScanManager
import com.cloud.diplomaticquarterapp.check_me_pro.ble.worker.BleDataWorker
import com.cloud.diplomaticquarterapp.utils.Constant
import com.cloud.diplomaticquarterapp.MainActivity
+import com.cloud.diplomaticquarterapp.check_me_pro.bean.toJson
+import com.cloud.diplomaticquarterapp.check_me_pro.ble.format.BpInfo
+import com.cloud.diplomaticquarterapp.check_me_pro.ble.format.EcgInfo
+import com.cloud.diplomaticquarterapp.check_me_pro.ble.format.GluInfo
+import com.cloud.diplomaticquarterapp.check_me_pro.ble.format.OxyInfo
+import com.cloud.diplomaticquarterapp.utils.UiChannel
import com.google.gson.Gson
@@ -56,6 +62,8 @@ import kotlinx.coroutines.withTimeoutOrNull
import org.apache.commons.io.FileUtils
import org.json.JSONObject
import java.io.File
+import java.text.SimpleDateFormat
+import java.util.Locale
class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivity: MainActivity) {
@@ -102,7 +110,6 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi
var mUserData: MutableList = java.util.ArrayList()
-
private val userChannel = Channel(Channel.CONFLATED)
@@ -311,6 +318,7 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi
@RequiresApi(Build.VERSION_CODES.M)
private fun scanForCheckMePro(bleScanManager: BleScanManager, scanResultHandler: (String, BluetoothDevice) -> Unit) {
+ initVar()
bleScanManager.initScan(this.mainActivity)
bleScanManager.setCallBack(object : BleScanManager.Scan {
override fun scanReturn(name: String, bluetoothDevice: BluetoothDevice) {
@@ -319,6 +327,10 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi
})
}
+ private fun initVar() {
+ Constant.initVar(this.mainActivity)
+ }
+
@SuppressLint("MissingPermission")
fun onScanResult(name: String, bluetoothDevice: BluetoothDevice) {
@@ -356,7 +368,8 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi
private suspend fun readUserFromCheckMePro() {
userChannel.receive()
- val userTemp = File(Constant.getPathX("usr.dat")).readBytes()
+
+ val userTemp = File(Constant.getPathX("usr.dat")).readBytes() // CRASHES HERE
userTemp.apply {
userInfo = UserInfo(this)
@@ -369,6 +382,7 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi
tIndex++
UiChannel.progressChannel.send(tIndex * 100 / total)
}
+ mUserData.add(user)
}
for (f in commonFileName) {
bleWorker.getFile(f)
@@ -378,7 +392,105 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi
delay(300)
UiChannel.progressChannel.close()
+ sendUsersDataToFlutter()
+
+ }
+ }
+
+
+ private fun sendUsersDataToFlutter() {
+ if (mUserData.isNotEmpty()) {
+
+ val jsonDataList = mutableListOf()
+ for (user in mUserData) {
+ val jsonData = user.toJson()
+ jsonDataList.add(jsonData)
+ }
+ Log.d("userBeanJSON", jsonDataList.toString())
+ val returnData = mapOf("type" to "CheckMeUsersList", "data" to jsonDataList)
+ eventSink?.success(returnData)
+ }
+ }
+
+ private fun getBPDataFromCheckMePro(s: String) {
+ val file = File(Constant.getPathX(s + "nibp.dat"))
+ if (file.exists()) {
+ val temp = file.readBytes()
+ if (temp.isNotEmpty()) {
+ temp.let {
+ val f = BpInfo(it)
+ val json = gson.toJson(f.Bp)
+ Log.d("BPMeter", json.toString())
+ }
+ }
+ } else {
+ // HANDLE FAILURE HERE WITH A GENERIC DATA MAP TO FLUTTER
+ }
+ }
+
+ private fun getGlucoseDataFromCheckMePro(s: String) {
+ val file = File(Constant.getPathX(s + "glu.dat"))
+ if (file.exists()) {
+ val temp = file.readBytes()
+ if (temp.isNotEmpty()) {
+ temp.let {
+ val f = GluInfo(it)
+ val json = gson.toJson(f.Glu)
+ Log.d("BloodGlucoseMeter", json.toString())
+ }
+ }
+ } else {
+ // HANDLE FAILURE HERE WITH A GENERIC DATA MAP TO FLUTTER
+ }
+ }
+
+
+ private fun getOxyDataFromCheckMePro() {
+ val file = File(Constant.getPathX("oxi.dat"))
+ if (file.exists()) {
+ val temp = file.readBytes()
+ if (temp.isNotEmpty()) {
+ temp.let {
+ val f = OxyInfo(it)
+ val json = gson.toJson(f.Oxy)
+ Log.d("Oximeter", json.toString())
+ }
+ }
+ } else {
+ // HANDLE FAILURE HERE WITH A GENERIC DATA MAP TO FLUTTER
+ }
+ }
+
+ private fun getECGDataFromCheckMePro() {
+ val file = File(Constant.getPathX("ecg.dat"))
+ if (file.exists()) {
+ val temp = file.readBytes()
+ if (temp.isNotEmpty()) {
+ temp.let {
+ val f = EcgInfo(it)
+ val json = gson.toJson(f.ecg)
+ Log.d("ECGMeter", json.toString())
+ }
+ }
+ } else {
+ // HANDLE FAILURE HERE WITH A GENERIC DATA MAP TO FLUTTER
+ }
+ }
+
+ private fun getTemperatureDataFromCheckMePro() {
+ val file = File(Constant.getPathX("tmp.dat"))
+ if (file.exists()) {
+ val temp = file.readBytes()
+ if (temp.isNotEmpty()) {
+ temp.let {
+ val f = TmpInfo(it)
+ val json = gson.toJson(f.Tmp)
+ Log.d("TempMeter", json.toString())
+ }
+ }
+ } else {
+ // HANDLE FAILURE HERE WITH A GENERIC DATA MAP TO FLUTTER
}
}
@@ -709,24 +821,41 @@ class BleBridge(private var flutterEngine: FlutterEngine, private var mainActivi
Log.d("DeviceFound", "This is the Device i have : ${currentBluetoothDevice.name}")
// stopScanForCheckMePro()
bleWorker.initWorker(this.mainActivity, currentBluetoothDevice.bluetoothDevice)
-
- uiScope.launch {
+ dataScope.launch {
val a = withTimeoutOrNull(10000) {
bleWorker.waitConnect()
}
+ a?.let {
+ val b = withTimeoutOrNull(10000) {
+ Log.d("getFile", "getFile 718")
+ bleWorker.getFile("usr.dat")
+ }
+ b?.let {
+ userChannel.send(1)
+ }
+
+
+ }
+ }
+ uiScope.launch {
+ readUserFromCheckMePro()
+ }
+
+
+// uiScope.launch {
+// val a = withTimeoutOrNull(10000) {
+// bleWorker.waitConnect()
+// }
// a?.let {
// val b = withTimeoutOrNull(10000) {
// bleWorker.getFile("usr.dat")
// }
-// b?.let {
-// userChannel.send(1)
-// }
// }
- }
+// }
// uiScope.launch {
-//// readUserFromCheckMePro()
+////
// getCheckMeProDeviceInfo()
// }
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/UiChannel.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/UiChannel.kt
index 5f4c18d4..d730cd2b 100644
--- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/UiChannel.kt
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/UiChannel.kt
@@ -2,6 +2,6 @@ package com.cloud.diplomaticquarterapp.check_me_pro
import kotlinx.coroutines.channels.Channel
-object UiChannel {
- val progressChannel = Channel(Channel.CONFLATED)
-}
\ No newline at end of file
+//object UiChannel {
+// val progressChannel = Channel(Channel.CONFLATED)
+//}
\ No newline at end of file
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/bean/UserBean.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/bean/UserBean.kt
index 009c7856..c65812a1 100644
--- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/bean/UserBean.kt
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/bean/UserBean.kt
@@ -1,5 +1,6 @@
package com.cloud.diplomaticquarterapp.check_me_pro.bean
+import com.google.gson.Gson
import java.util.*
data class UserBean(
@@ -12,3 +13,7 @@ data class UserBean(
var height: Int = 0,
var color: Int = 0
)
+
+fun UserBean.toJson(): String {
+ return Gson().toJson(this)
+}
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/ble/format/OxyInfo.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/ble/format/OxyInfo.kt
index 08ddc44f..ab5d8643 100644
--- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/ble/format/OxyInfo.kt
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/ble/format/OxyInfo.kt
@@ -7,11 +7,9 @@ import java.util.*
class OxyInfo constructor(var bytes: ByteArray) {
var size: Int = bytes.size / 12
- var Oxy: ArrayList = arrayListOf()
-
+ var Oxy: ArrayList = arrayListOf()
init {
-
var start: Int
for (k in 0 until size) {
start = k * 12
@@ -48,17 +46,11 @@ class OxyInfo constructor(var bytes: ByteArray) {
face = toUInt(setRange(start + 11, 1))
if (face > 2) face = 2
}
-
-
}
-
-
}
private fun setRange(start: Int, len: Int): ByteArray {
return bytes.copyOfRange(start, start + len)
}
-
-
}
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/ble/manager/BleScanManager.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/ble/manager/BleScanManager.kt
index cff89423..2c41034e 100644
--- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/ble/manager/BleScanManager.kt
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/ble/manager/BleScanManager.kt
@@ -12,6 +12,7 @@ import android.content.Context
import android.os.Build
import android.util.Log
import androidx.annotation.RequiresApi
+import com.cloud.diplomaticquarterapp.utils.Constant
class BleScanManager {
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/ble/worker/BleDataWorker.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/ble/worker/BleDataWorker.kt
index e81554b7..ba9fab1b 100644
--- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/ble/worker/BleDataWorker.kt
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/check_me_pro/ble/worker/BleDataWorker.kt
@@ -2,9 +2,11 @@ package com.cloud.diplomaticquarterapp.check_me_pro.ble.worker
import android.bluetooth.BluetoothDevice
import android.content.Context
+import android.os.Environment
import android.util.Log
import com.cloud.diplomaticquarterapp.check_me_pro.ble.format.CheckMeResponse
import com.cloud.diplomaticquarterapp.check_me_pro.ble.format.DeviceInfo
+import com.cloud.diplomaticquarterapp.check_me_pro.ble.format.UserInfo
import com.cloud.diplomaticquarterapp.check_me_pro.ble.manager.BleDataManager
import com.cloud.diplomaticquarterapp.check_me_pro.ble.pkg.EndReadPkg
import com.cloud.diplomaticquarterapp.check_me_pro.ble.pkg.GetDeviceInfoPkg
@@ -124,11 +126,14 @@ class BleDataWorker(private val updateEventSink: (Map) -> Unit) {
result = 0
Log.i("file", "receive $currentFileName")
File(Constant.getPathX(currentFileName)).writeBytes(this)
+
}
val pkg = EndReadPkg()
Log.i("file", "bytes ${pkg.buf}")
sendCmd(pkg.buf)
cmdState = 3
+
+
} else {
val pkg = ReadContentPkg(currentPkg)
sendCmd(pkg.buf)
@@ -157,7 +162,6 @@ class BleDataWorker(private val updateEventSink: (Map) -> Unit) {
s += "$k: "
s += "${json.get(k)} "
}
- Log.d("DeviceInfoFaiz", "This is the DeviceInfo: ${gson.toJson(json)}");
val returnData = mapOf("type" to "infoDataCheckMe", "data" to gson.toJson(json))
updateEventSink(returnData)
}
@@ -184,8 +188,6 @@ class BleDataWorker(private val updateEventSink: (Map) -> Unit) {
myBleDataManager?.setNotifyListener(comeData)
bluetoothDevice?.let {
myBleDataManager?.connect(it)?.useAutoConnect(false)?.retry(150, 100)?.done {
- Log.i("BLE", "连接成功了.>>.....>>>>")
- getDeviceInfo();
dataScope.launch {
connectChannel.send("yes")
}
@@ -202,7 +204,7 @@ class BleDataWorker(private val updateEventSink: (Map) -> Unit) {
this.currentFileName = name
cmdState = 1
val pkg = StartReadPkg(name)
- Log.i("----- Current PKG -----", pkg.toString());
+ Log.i("----- Current PKG -----", pkg.buf.toString());
sendCmd(pkg.buf)
return fileChannel.receive()
}
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/UiChannel.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/UiChannel.kt
new file mode 100644
index 00000000..6437981e
--- /dev/null
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/utils/UiChannel.kt
@@ -0,0 +1,7 @@
+package com.cloud.diplomaticquarterapp.utils
+
+import kotlinx.coroutines.channels.Channel
+
+object UiChannel {
+ val progressChannel = Channel(Channel.CONFLATED)
+}
\ No newline at end of file
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 02f3c0ad..818b4492 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
@@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/ble_de
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/buttons/defaultButton.dart';
+import 'package:diplomaticquarterapp/widgets/data_display/medical/medical_profile_item.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
@@ -31,11 +32,62 @@ class _AndesAllInOneConnectScreenState extends State
super.dispose();
}
- Widget buildWeightScaleUI(MyTrackersViewModel myTrackersViewModel) {
+ 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";
+ }
+
+ Future onTrackerTypePressed(TrackerTypeEnum trackerTypeEnum, MyTrackersViewModel myTrackersViewModel) async {
+ switch (trackerTypeEnum) {
+ case TrackerTypeEnum.BloodPressureTracker:
+ case TrackerTypeEnum.BloodSugarTracker:
+ myTrackersViewModel.getCheckMeUsersListDialog(context);
+ break;
+ case TrackerTypeEnum.OxymeterTracker:
+ // TODO: Handle this case.
+ break;
+ case TrackerTypeEnum.ECGTracker:
+ // TODO: Handle this case.
+ break;
+ case TrackerTypeEnum.Temperature:
+ // TODO: Handle this case.
+ break;
+ case TrackerTypeEnum.Spirometer:
+ case TrackerTypeEnum.WeightScale:
+ case TrackerTypeEnum.AllInOneTracker:
+ break;
+ }
+ }
+
+ Widget buildAllInOneUI(MyTrackersViewModel myTrackersViewModel) {
return Expanded(
child: ListView(
children: [
- if (myTrackersViewModel.checkMeInfo == null) ...[
+ if (myTrackersViewModel.checkMeProUsersList == null) ...[
Padding(
padding: const EdgeInsets.all(24.0),
child: Center(
@@ -46,15 +98,30 @@ class _AndesAllInOneConnectScreenState extends State
),
)
] else ...[
- Padding(
- padding: const EdgeInsets.all(24.0),
- child: Center(
- child: Text(
- "${myTrackersViewModel.checkMeInfo.toString()}",
- style: TextStyle(fontSize: 9.0),
+ Center(
+ child: Column(
+ children: [
+ GridView.builder(
+ shrinkWrap: true,
+ primary: false,
+ physics: NeverScrollableScrollPhysics(),
+ gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, childAspectRatio: 2 / 2, crossAxisSpacing: 12, mainAxisSpacing: 12),
+ padding: EdgeInsets.zero,
+ itemCount: myTrackersViewModel.checkMeProTrackers.length,
+ itemBuilder: (BuildContext context, int index) {
+ return InkWell(
+ onTap: () => onTrackerTypePressed(myTrackersViewModel.checkMeProTrackers[index], myTrackersViewModel),
+ child: MedicalProfileItem(
+ title: getTrackerNameByEnum(myTrackersViewModel.checkMeProTrackers[index]),
+ imagePath: 'tracker.svg',
+ subTitle: "",
+ isEnable: true,
+ ),
+ );
+ },
),
- ),
- )
+ ],
+ ))
]
],
),
@@ -77,8 +144,8 @@ class _AndesAllInOneConnectScreenState extends State
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- buildWeightScaleUI(myTrackersViewModel),
- if (myTrackersViewModel.isAndesfitDeviceConnected != null && myTrackersViewModel.isAndesfitDeviceConnected) ...[
+ buildAllInOneUI(myTrackersViewModel),
+ if (myTrackersViewModel.checkMeProUsersList != null) ...[
Row(
children: [
Expanded(
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 da3470a9..8c73703f 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
@@ -16,6 +16,7 @@ import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
+import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
class BleDevicesScreen extends StatefulWidget {
@@ -118,7 +119,22 @@ class _BleDevicesScreenState extends State {
if (myTrackersVm.isDeviceFromAndesFit(device.name)) {
return;
}
- Navigator.pushReplacement(context, FadePage(page: AndesAllInOneConnectScreen(deviceModel: device)));
+
+ Permission.storage.isGranted.then((isGranted) {
+ log("isGranted: $isGranted");
+
+ 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/lepu_device_types/bloodpressure_connect_screen.dart b/lib/pages/medical/my_trackers/ble_device_type_screens/lepu_device_types/bloodpressure_connect_screen.dart
index df56ba18..82f55c0c 100644
--- a/lib/pages/medical/my_trackers/ble_device_type_screens/lepu_device_types/bloodpressure_connect_screen.dart
+++ b/lib/pages/medical/my_trackers/ble_device_type_screens/lepu_device_types/bloodpressure_connect_screen.dart
@@ -324,7 +324,6 @@ class _BloodPressureConnectScreenState extends State
if (myTrackersVm.isECGSelected) ...[
IconButton(
onPressed: () async {
-
myTrackersVm.updateFilesLoader(true);
showHistoryDialog(context);
await myTrackersVm.getEcgFilesList(widget.deviceModel);
diff --git a/lib/pages/medical/my_trackers/ble_device_type_screens/select_tracker_type.dart b/lib/pages/medical/my_trackers/ble_device_type_screens/select_tracker_type.dart
index 471090d0..f12b2d1d 100644
--- a/lib/pages/medical/my_trackers/ble_device_type_screens/select_tracker_type.dart
+++ b/lib/pages/medical/my_trackers/ble_device_type_screens/select_tracker_type.dart
@@ -1,4 +1,3 @@
-
import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_device_type_screens/ble_devices_screen.dart';
import 'package:diplomaticquarterapp/pages/medical/my_trackers/my_trackers_view_model/my_trackers_view_model.dart';
import 'package:diplomaticquarterapp/widgets/data_display/medical/medical_profile_item.dart';
@@ -10,7 +9,6 @@ import 'package:provider/provider.dart';
class SelectTrackerType extends StatelessWidget {
const SelectTrackerType();
-
List myTrackersTypeList({BuildContext context}) {
List medical = [];
medical.add(InkWell(
@@ -25,90 +23,104 @@ class SelectTrackerType extends StatelessWidget {
isEnable: true,
),
));
- medical.add(InkWell(
- onTap: () {
- context.read().updateSelectedTrackerType(TrackerTypeEnum.BloodPressureTracker);
- Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
- },
- child: MedicalProfileItem(
- title: "Blood Pressure",
- imagePath: 'tracker.svg',
- subTitle: "Tracker",
- isEnable: true,
+ medical.add(
+ InkWell(
+ onTap: () {
+ context.read().updateSelectedTrackerType(TrackerTypeEnum.BloodPressureTracker);
+ Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
+ },
+ child: MedicalProfileItem(
+ title: "Blood Pressure",
+ imagePath: 'tracker.svg',
+ subTitle: "Tracker",
+ isEnable: true,
+ ),
),
- ));
- medical.add(InkWell(
- onTap: () {
- context.read().updateSelectedTrackerType(TrackerTypeEnum.BloodSugarTracker);
- Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
- },
- child: MedicalProfileItem(
- title: "Blood Sugar",
- imagePath: 'tracker.svg',
- subTitle: "Tracker",
- isEnable: true,
+ );
+ medical.add(
+ InkWell(
+ onTap: () {
+ context.read().updateSelectedTrackerType(TrackerTypeEnum.BloodSugarTracker);
+ Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
+ },
+ child: MedicalProfileItem(
+ title: "Blood Sugar",
+ imagePath: 'tracker.svg',
+ subTitle: "Tracker",
+ isEnable: true,
+ ),
),
- ));
- medical.add(InkWell(
- onTap: () {
- context.read().updateSelectedTrackerType(TrackerTypeEnum.ECGTracker);
- Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
- },
- child: MedicalProfileItem(
- title: "ECG",
- imagePath: 'tracker.svg',
- subTitle: "Tracker",
- isEnable: true,
+ );
+ medical.add(
+ InkWell(
+ onTap: () {
+ context.read().updateSelectedTrackerType(TrackerTypeEnum.ECGTracker);
+ Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
+ },
+ child: MedicalProfileItem(
+ title: "ECG",
+ imagePath: 'tracker.svg',
+ subTitle: "Tracker",
+ isEnable: true,
+ ),
),
- ));
- medical.add(InkWell(
- onTap: () {
- context.read().updateSelectedTrackerType(TrackerTypeEnum.WeightScale);
- Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
- },
- child: MedicalProfileItem(
- title: "Weight",
- imagePath: 'tracker.svg',
- subTitle: "Scale",
- isEnable: true,
+ );
+ medical.add(
+ InkWell(
+ onTap: () {
+ context.read().updateSelectedTrackerType(TrackerTypeEnum.WeightScale);
+ Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
+ },
+ child: MedicalProfileItem(
+ title: "Weight",
+ imagePath: 'tracker.svg',
+ subTitle: "Scale",
+ isEnable: true,
+ ),
),
- ));
- medical.add(InkWell(
- onTap: () {
- context.read().updateSelectedTrackerType(TrackerTypeEnum.Temperature);
- Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
- },
- child: MedicalProfileItem(
- title: "Temperature",
- imagePath: 'tracker.svg',
- subTitle: "Scale",
- isEnable: true,
+ );
+ medical.add(
+ InkWell(
+ onTap: () {
+ context.read().updateSelectedTrackerType(TrackerTypeEnum.Temperature);
+ Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
+ },
+ child: MedicalProfileItem(
+ title: "Temperature",
+ imagePath: 'tracker.svg',
+ subTitle: "Scale",
+ isEnable: true,
+ ),
),
- ));
- medical.add(InkWell(
- onTap: () {
- context.read().updateSelectedTrackerType(TrackerTypeEnum.Spirometer);
- Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
- },
- child: MedicalProfileItem(
- title: "Spirometer",
- imagePath: 'tracker.svg',
- subTitle: "Tracker",
- isEnable: true,
+ );
+ medical.add(
+ InkWell(
+ onTap: () {
+ context.read().updateSelectedTrackerType(TrackerTypeEnum.Spirometer);
+ Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
+ },
+ child: MedicalProfileItem(
+ title: "Spirometer",
+ imagePath: 'tracker.svg',
+ subTitle: "Tracker",
+ isEnable: true,
+ ),
),
- ));
- medical.add(InkWell(
- onTap: () {
- context.read().updateSelectedTrackerType(TrackerTypeEnum.AllInOneTracker);
- Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
- },
- child: MedicalProfileItem(
- title: "All in one Monitor",
- imagePath: 'tracker.svg',
- subTitle: "Tracker",
- isEnable: true,
+ );
+ medical.add(
+ InkWell(
+ onTap: () {
+ context.read().updateSelectedTrackerType(TrackerTypeEnum.AllInOneTracker);
+ Navigator.of(context).push(FadePage(page: BleDevicesScreen()));
+ },
+ child: MedicalProfileItem(
+ title: "All in one Monitor",
+ imagePath: 'tracker.svg',
+ subTitle: "Tracker",
+ isEnable: true,
+ ),
),
- ));
+ );
return medical;
}
diff --git a/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_bp_model.dart b/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_bp_model.dart
new file mode 100644
index 00000000..0dc05d99
--- /dev/null
+++ b/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_bp_model.dart
@@ -0,0 +1,27 @@
+class CheckMeBPModel {
+ String date;
+ int dia;
+ int pr;
+ int sys;
+ String timeString;
+
+ CheckMeBPModel({this.date, this.dia, this.pr, this.sys, this.timeString});
+
+ CheckMeBPModel.fromJson(Map json) {
+ date = json['date'];
+ dia = json['dia'];
+ pr = json['pr'];
+ sys = json['sys'];
+ timeString = json['timeString'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['date'] = this.date;
+ data['dia'] = this.dia;
+ data['pr'] = this.pr;
+ data['sys'] = this.sys;
+ data['timeString'] = this.timeString;
+ return data;
+ }
+}
diff --git a/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_ecg_model.dart b/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_ecg_model.dart
new file mode 100644
index 00000000..3a57e762
--- /dev/null
+++ b/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_ecg_model.dart
@@ -0,0 +1,27 @@
+class CheckMeECGModel {
+ String date;
+ int face;
+ String timeString;
+ int voice;
+ int way;
+
+ CheckMeECGModel({this.date, this.face, this.timeString, this.voice, this.way});
+
+ CheckMeECGModel.fromJson(Map json) {
+ date = json['date'];
+ face = json['face'];
+ timeString = json['timeString'];
+ voice = json['voice'];
+ way = json['way'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['date'] = this.date;
+ data['face'] = this.face;
+ data['timeString'] = this.timeString;
+ data['voice'] = this.voice;
+ data['way'] = this.way;
+ return data;
+ }
+}
diff --git a/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_glucose_model.dart b/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_glucose_model.dart
new file mode 100644
index 00000000..6b5d6797
--- /dev/null
+++ b/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_glucose_model.dart
@@ -0,0 +1,24 @@
+class CheckMeGlucoseModel {
+ String date;
+ double glu;
+ String note;
+ String timeString;
+
+ CheckMeGlucoseModel({this.date, this.glu, this.note, this.timeString});
+
+ CheckMeGlucoseModel.fromJson(Map json) {
+ date = json['date'];
+ glu = json['glu'];
+ note = json['note'];
+ timeString = json['timeString'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['date'] = this.date;
+ data['glu'] = this.glu;
+ data['note'] = this.note;
+ data['timeString'] = this.timeString;
+ return data;
+ }
+}
diff --git a/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_oxi_model.dart b/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_oxi_model.dart
new file mode 100644
index 00000000..00a83c82
--- /dev/null
+++ b/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_oxi_model.dart
@@ -0,0 +1,36 @@
+class CheckMeOxiModel {
+ String date;
+ int face;
+ int oxy;
+ int pi;
+ int pr;
+ String timeString;
+ int way;
+
+ CheckMeOxiModel({this.date, this.face, this.oxy, this.pi, this.pr, this.timeString, this.way});
+
+ CheckMeOxiModel.fromJson(Map json) {
+ date = json['date'];
+ face = json['face'];
+ oxy = json['oxy'];
+ pi = json['pi'];
+ pr = json['pr'];
+ timeString = json['timeString'];
+ way = json['way'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['date'] = this.date;
+ data['face'] = this.face;
+ data['oxy'] = this.oxy;
+ data['pi'] = this.pi;
+ data['pr'] = this.pr;
+ data['timeString'] = this.timeString;
+ data['way'] = this.way;
+ return data;
+ }
+}
+
+
+
diff --git a/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_temperature_model.dart b/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_temperature_model.dart
new file mode 100644
index 00000000..90265fe9
--- /dev/null
+++ b/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_temperature_model.dart
@@ -0,0 +1,29 @@
+class CheckMeTemperatureModel {
+ String date;
+ int face;
+ String timeString;
+ double tmp;
+ int way;
+
+ CheckMeTemperatureModel({this.date, this.face, this.timeString, this.tmp, this.way});
+
+ CheckMeTemperatureModel.fromJson(Map json) {
+ date = json['date'];
+ face = json['face'];
+ timeString = json['timeString'];
+ tmp = json['tmp'];
+ way = json['way'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['date'] = this.date;
+ data['face'] = this.face;
+ data['timeString'] = this.timeString;
+ data['tmp'] = this.tmp;
+ data['way'] = this.way;
+ return data;
+ }
+}
+
+
diff --git a/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_user_model.dart b/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_user_model.dart
new file mode 100644
index 00000000..faf377fc
--- /dev/null
+++ b/lib/pages/medical/my_trackers/ble_models/checkmepro_all_in_one_models/checkme_user_model.dart
@@ -0,0 +1,36 @@
+class CheckMeUserInfoModel {
+ String birthday;
+ int color;
+ int height;
+ int ico;
+ String id;
+ String name;
+ int sex;
+ int weight;
+
+ CheckMeUserInfoModel({this.birthday, this.color, this.height, this.ico, this.id, this.name, this.sex, this.weight});
+
+ CheckMeUserInfoModel.fromJson(Map json) {
+ birthday = json['birthday'];
+ color = json['color'];
+ height = json['height'];
+ ico = json['ico'];
+ id = json['id'];
+ name = json['name'];
+ sex = json['sex'];
+ weight = json['weight'];
+ }
+
+ Map toJson() {
+ final Map data = new Map();
+ data['birthday'] = this.birthday;
+ data['color'] = this.color;
+ data['height'] = this.height;
+ data['ico'] = this.ico;
+ data['id'] = this.id;
+ data['name'] = this.name;
+ data['sex'] = this.sex;
+ data['weight'] = this.weight;
+ return data;
+ }
+}
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 5f6cd5cf..187bb283 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
@@ -1,10 +1,12 @@
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_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_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';
import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_models/viatom_devices/ecg_rt_model.dart';
@@ -14,6 +16,7 @@ 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';
@@ -21,6 +24,7 @@ import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_helpers/ble_connect_helper.dart';
import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
enum TrackerTypeEnum { OxymeterTracker, BloodPressureTracker, BloodSugarTracker, ECGTracker, WeightScale, Temperature, Spirometer, AllInOneTracker }
@@ -31,7 +35,7 @@ String kRealTimeDataBPResult = "RealTimeDataBPResult";
String kOxyRtParam = "OxyRtParam";
String kDevicesList = "DevicesList";
String kDevicesListCheckMe = "DevicesListCheckMe";
-String kInfoDataCheckMe = "infoDataCheckMe";
+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";
@@ -103,6 +107,13 @@ class MyTrackersViewModel extends ChangeNotifier {
};
List ecgEnabledDevices = ["BP2 0567", "DuoEK", "ER1", "PM101897"];
+ List checkMeProTrackers = [
+ TrackerTypeEnum.Temperature,
+ TrackerTypeEnum.BloodPressureTracker,
+ TrackerTypeEnum.OxymeterTracker,
+ TrackerTypeEnum.BloodSugarTracker,
+ TrackerTypeEnum.ECGTracker,
+ ];
List andesFitDevices = [
"BPM",
"PM101897",
@@ -211,13 +222,102 @@ class MyTrackersViewModel extends ChangeNotifier {
notifyListeners();
}
- String checkMeInfo;
+ List checkMeProUsersList;
+
+ void updateCheckMeUserInfoModel(List returnData) {
+ if (checkMeProUsersList != null) {
+ checkMeProUsersList.clear();
+ }
+ checkMeProUsersList = List.generate(returnData.length, (index) => CheckMeUserInfoModel.fromJson(jsonDecode(returnData[index])));
- void updateCheckMeInfoModel(String mapData) {
- checkMeInfo = mapData;
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(
@@ -323,8 +423,8 @@ class MyTrackersViewModel extends ChangeNotifier {
parsesDevicesList(list);
}
- if (event['type'] == kInfoDataCheckMe) {
- updateCheckMeInfoModel(event['data'].toString());
+ if (event['type'] == kCheckMeUsersList) {
+ updateCheckMeUserInfoModel(event['data']);
}
});
@@ -651,8 +751,6 @@ class MyTrackersViewModel extends ChangeNotifier {
String resultSet1 = "";
String resultSet2 = "";
- String resultSetCheckMeProUsers = "";
-
Future connectAndesfitWeightDevice(BluetoothDevice device) async {
log("deviceToConnect: ${device.toString()}");
@@ -1093,16 +1191,10 @@ class MyTrackersViewModel extends ChangeNotifier {
bool isDeviceSelected = false;
- List listOutput = [];
-
- int cmdState = 0;
- String currentFileName = "usr.dat";
- var currentFileSize = 0;
- int pkgTotal = 0;
- int result = 0;
- int currentPkg = 0;
-
Future connectAndesfitAllInOneDevice(BluetoothDevice device) async {
log("deviceToConnect: ${device.toString()}");
}
+
+//// --> CHECK ME PRO
+
}