plug_sport_wear2.dart 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import 'package:pedometer/pedometer.dart';
  2. import '../../../appcore/exercise.dart';
  3. import '../app.dart';
  4. import '../sport_wear.dart';
  5. import 'plug.dart';
  6. import 'package:get/get.dart';
  7. class PlugSportWear extends Plug {
  8. Exercise? _exercise;
  9. final SportWearService _sportWearService = Get.find();
  10. final _app = App.to;
  11. var _initStepCount = -1;
  12. void start(){
  13. heartRate.value=0;
  14. heartRatePercent.value=0;
  15. ei .value=0;
  16. ck .value=0;
  17. kCal.value=0;
  18. exerciseKcal.value=0;
  19. hrMean .value=0;
  20. hrMax.value=0;
  21. stepCount .value=0;
  22. _exercise?.close();
  23. _exercise=null;
  24. _initExercise();
  25. _isStart=true;
  26. }
  27. void stop(){
  28. _isStart=false;
  29. }
  30. Future<void> _initExercise()async{
  31. final exercise = Exercise();
  32. await exercise.init();
  33. final userProfile = _app.userProfile;
  34. await exercise.set(
  35. age: userProfile.age.val,
  36. sex: userProfile.sex,
  37. weightKg: userProfile.weightKg.val,
  38. heightCm: userProfile.heightCm.val,
  39. rhr: userProfile.rhr.val.toDouble());
  40. _exercise = exercise;
  41. }
  42. @override
  43. Future<void> init() async{
  44. await _initExercise();
  45. listenRx(_sportWearService.heartRateMeasurement, (p0) {
  46. heartRate.value = p0.heartRate;
  47. _exercise?.hrPercent(p0.heartRate).then((value) => heartRatePercent.value = value);
  48. if(_isStart){
  49. _exercise?.hrPush(p0.heartRate, p0.timestamp).then((value){
  50. _exercise?.ei().then((v) => ei.value = v);
  51. _exercise?.ck().then((v) => ck.value = v);
  52. _exercise?.kCal().then((v) => kCal.value = v);
  53. _exercise?.exerciseKcal().then((v) => exerciseKcal.value = v);
  54. _exercise?.hrMax().then((v) => hrMax.value = v);
  55. _exercise?.hrMean().then((v) => hrMean.value = v);
  56. });
  57. }
  58. });
  59. final stream = Pedometer.stepCountStream;
  60. stepCount.bindStream(stream.map((event){
  61. if(!_isStart){
  62. return 0;
  63. }
  64. if(_initStepCount == -1){
  65. _initStepCount = event.steps;
  66. return 0;
  67. }
  68. final stepCount = event.steps - _initStepCount;
  69. return stepCount;
  70. }));
  71. }
  72. @override
  73. Future<void> onClose() async{
  74. _exercise?.close();
  75. _exercise=null;
  76. }
  77. var _isStart=false;
  78. final heartRate = 0.obs;
  79. final heartRatePercent = 0.0.obs;
  80. final ei = 0.0.obs;
  81. final ck = 0.0.obs;
  82. final kCal = 0.0.obs;
  83. final exerciseKcal = 0.0.obs;
  84. final hrMean = 0.obs;
  85. final hrMax = 0.obs;
  86. final stepCount = 0.obs;
  87. }