| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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<void> 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<void> 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<void> scanStart() async{
- if(_isScanning){
- return;
- }
- await Sensor.sportWearScanStart();
- _isScanning=true;
- }
- Future<void> scanStop() async{
- await Sensor.sportWearScanStop();
- _isScanning=false;
- }
- Future<void> connect(SportWear wear)async{
- info('命令连接心率带:${wear.name}');
- _isSelectedNewWear=true;
- App.to.userProfile.lastUseSportWearMac.val= wear.address;
- await Sensor.sportWearConnect(wear);
- }
- Future<void> disconnect(SportWear wear)async{
- App.to.userProfile.lastUseSportWearMac.val='';
- await Sensor.sportWearDisconnect(wear);
- }
- final Rx<SportWear?> connectedSportWear = Rx(null);
- final sportWearScanResult = <SportWear>[].obs;
- final heartRateMeasurement = HeartRateMeasurement().obs;
- }
|