You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PatientApp-KKUMC/lib/pages/medical/my_trackers/viatom_devices/oxymeter_ble.dart

152 lines
4.8 KiB
Dart

import 'dart:io';
import 'package:diplomaticquarterapp/pages/medical/my_trackers/ble_helpers/ble_connect_helper.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';
class Oxymeter_BLE extends StatefulWidget {
@override
State<Oxymeter_BLE> createState() => _Oxymeter_BLEState();
}
class _Oxymeter_BLEState extends State<Oxymeter_BLE> {
EventChannel eventChannel = EventChannel('BLE-Platform-Bridge-Event');
String receivedData = '';
final oxymeterValueNotifier = ValueNotifier<String>("start");
String deviceName = "CheckMeO2";
// String deviceName = "POD";
@override
void dispose() {
oxymeterValueNotifier.dispose();
super.dispose();
BleChannel.disconnect();
}
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
return AppScaffold(
appBarTitle: "Oxymeter",
showNewAppBar: true,
isShowDecPage: false,
showNewAppBarTitle: true,
backgroundColor: Color(0xffF8F8F8),
body: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: GestureDetector(
onTap: () {
// await BleChannel.getScanningResult();
checkBLEPermissions();
},
child: Container(
width: 50,
height: 50,
color: Colors.blueAccent,
),
),
),
ValueListenableBuilder(
valueListenable: oxymeterValueNotifier,
builder: (context, value, _) {
return value != "start"
? Platform.isAndroid
? Column(
children: [
Text(
getSPO2(
value.toString().replaceAll("RtParam", ""),
),
),
Text(
getPR(
value.toString().replaceAll("RtParam", ""),
),
),
// Text(
// getPI(
// value.toString().replaceAll("RtParam", ""),
// ),
// ),
],
)
: Column(
children: [
Text(getSPO2iOS(value.toString())),
Text(getPRiOS(value.toString())),
],
)
: Text(value);
},
),
],
),
),
);
}
void checkBLEPermissions() async {
[Permission.location, Permission.storage, Permission.bluetooth, Permission.bluetoothConnect, Permission.bluetoothScan].request().then((status) async {
// startBLEConnection();
eventChannel.receiveBroadcastStream().listen((event) {
print('Received event---: $event');
oxymeterValueNotifier.value = event;
// O2M response: RtParam{spo2=0, pr=0, steps=0, battery=72, batteryState=0, vector=0, pi=0.0, state=0, countDown=0, invalidIvState=0, spo2IvState=0, hrIvState=0, vectorIvState=0}
// POD-1W response: RtParam{spo2=98, pr=104, pi=5.8, isProbeOff=false, isPulseSearching=false}
});
await BleChannel.scanResultsNative(["oximeter", deviceName]);
});
}
String getSPO2(String value) {
return "SpO2: " + value.split(",")[0].replaceAll("{spo2=", "");
}
String getPR(String value) {
return "Pulse Rate: " + value.split(",")[1].replaceAll("pr=", "");
}
String getPI(String value) {
return "Perfusion Index: " + value.split(",")[2].replaceAll("pi=", "") + "%";
}
String getSPO2iOS(String value) {
return "SpO2: " + value.split(",")[0];
}
String getPRiOS(String value) {
return "Pulse Rate: " + value.split(",")[1];
}
// List<String> setResult(String value) {
// List<String> values = value.split(",");
//
// print(values[0].replaceAll("{spo2=", ""));
// print(values[1].replaceAll("pr=", ""));
// print(values[2].replaceAll("pi=", ""));
//
// values.clear();
// values.add(values[0].replaceAll("{spo2=", ""));
// values.add(values[1].replaceAll("pr=", ""));
// values.add(values[2].replaceAll("pi=", ""));
//
// return values;
// }
}