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 createState() => _Oxymeter_BLEState(); } class _Oxymeter_BLEState extends State { EventChannel eventChannel = EventChannel('BLE-Platform-Bridge-Event'); String receivedData = ''; final oxymeterValueNotifier = ValueNotifier("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 setResult(String value) { // List 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; // } }