import 'package:trackoffical_app/service/app.dart'; import 'package:trackoffical_app/service/service.dart'; import 'package:sensor/sensor.dart'; import 'package:trackoffical_app/logger.dart'; class SportWearService extends IService{ @override Future init() async{ final connectedSportWearStream = Sensor.sportWearConnectedStream.map( (event) => event.isEmpty?null: event.first); connectedSportWear.bindStream(connectedSportWearStream); sportWearScanResult.bindStream(Sensor.sportWearScanResultStream); heartRateMeasurement.bindStream(Sensor.sportWearHeartRateMeasurementStream); tryConnectLastConnect().then((v) { info('心率带已连接'); }); } var _isSelectedNewWear = false; var _isScanning = false; Future tryConnectLastConnect()async{ if(App.to.userProfile.lastUseSportWearMac.val.isEmpty){ return; } scanStart(); while(!_isSelectedNewWear){ await Future.delayed(100.milliseconds); for(var one in sportWearScanResult){ if(one.address == App.to.userProfile.lastUseSportWearMac.val){ scanStop(); connect(one); return; } } } } Future scanStart() async{ if(_isScanning){ return; } await Sensor.sportWearScanStart(); _isScanning=true; } Future scanStop() async{ await Sensor.sportWearScanStop(); _isScanning=false; } Future connect(SportWear wear)async{ info('命令连接心率带:${wear.name}'); _isSelectedNewWear=true; App.to.userProfile.lastUseSportWearMac.val= wear.address; await Sensor.sportWearConnect(wear); } Future disconnect(SportWear wear)async{ App.to.userProfile.lastUseSportWearMac.val=''; await Sensor.sportWearDisconnect(wear); } final Rx connectedSportWear = Rx(null); final sportWearScanResult = [].obs; final heartRateMeasurement = HeartRateMeasurement().obs; }