sport_wear.dart 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import 'package:trackoffical_app/service/app.dart';
  2. import 'package:trackoffical_app/service/service.dart';
  3. import 'package:sensor/sensor.dart';
  4. import 'package:trackoffical_app/logger.dart';
  5. class SportWearService extends IService{
  6. @override
  7. Future<void> init() async{
  8. final connectedSportWearStream = Sensor.sportWearConnectedStream.map(
  9. (event) => event.isEmpty?null: event.first);
  10. connectedSportWear.bindStream(connectedSportWearStream);
  11. sportWearScanResult.bindStream(Sensor.sportWearScanResultStream);
  12. heartRateMeasurement.bindStream(Sensor.sportWearHeartRateMeasurementStream);
  13. tryConnectLastConnect().then((v) {
  14. info('心率带已连接');
  15. });
  16. }
  17. var _isSelectedNewWear = false;
  18. var _isScanning = false;
  19. Future<void> tryConnectLastConnect()async{
  20. if(App.to.userProfile.lastUseSportWearMac.val.isEmpty){
  21. return;
  22. }
  23. scanStart();
  24. while(!_isSelectedNewWear){
  25. await Future.delayed(100.milliseconds);
  26. for(var one in sportWearScanResult){
  27. if(one.address == App.to.userProfile.lastUseSportWearMac.val){
  28. scanStop();
  29. connect(one);
  30. return;
  31. }
  32. }
  33. }
  34. }
  35. Future<void> scanStart() async{
  36. if(_isScanning){
  37. return;
  38. }
  39. await Sensor.sportWearScanStart();
  40. _isScanning=true;
  41. }
  42. Future<void> scanStop() async{
  43. await Sensor.sportWearScanStop();
  44. _isScanning=false;
  45. }
  46. Future<void> connect(SportWear wear)async{
  47. info('命令连接心率带:${wear.name}');
  48. _isSelectedNewWear=true;
  49. App.to.userProfile.lastUseSportWearMac.val= wear.address;
  50. await Sensor.sportWearConnect(wear);
  51. }
  52. Future<void> disconnect(SportWear wear)async{
  53. App.to.userProfile.lastUseSportWearMac.val='';
  54. await Sensor.sportWearDisconnect(wear);
  55. }
  56. final Rx<SportWear?> connectedSportWear = Rx(null);
  57. final sportWearScanResult = <SportWear>[].obs;
  58. final heartRateMeasurement = HeartRateMeasurement().obs;
  59. }