import 'package:pedometer/pedometer.dart'; import '../../../appcore/exercise.dart'; import '../app.dart'; import '../sport_wear.dart'; import 'plug.dart'; import 'package:get/get.dart'; class PlugSportWear extends Plug { Exercise? _exercise; final SportWearService _sportWearService = Get.find(); final _app = App.to; var _initStepCount = -1; void start(){ heartRate.value=0; heartRatePercent.value=0; ei .value=0; ck .value=0; kCal.value=0; exerciseKcal.value=0; hrMean .value=0; hrMax.value=0; stepCount .value=0; _exercise?.close(); _exercise=null; _initExercise(); _isStart=true; } void stop(){ _isStart=false; } Future _initExercise()async{ final exercise = Exercise(); await exercise.init(); final userProfile = _app.userProfile; await exercise.set( age: userProfile.age.val, sex: userProfile.sex, weightKg: userProfile.weightKg.val, heightCm: userProfile.heightCm.val, rhr: userProfile.rhr.val.toDouble()); _exercise = exercise; } @override Future init() async{ await _initExercise(); listenRx(_sportWearService.heartRateMeasurement, (p0) { heartRate.value = p0.heartRate; _exercise?.hrPercent(p0.heartRate).then((value) => heartRatePercent.value = value); if(_isStart){ _exercise?.hrPush(p0.heartRate, p0.timestamp).then((value){ _exercise?.ei().then((v) => ei.value = v); _exercise?.ck().then((v) => ck.value = v); _exercise?.kCal().then((v) => kCal.value = v); _exercise?.exerciseKcal().then((v) => exerciseKcal.value = v); _exercise?.hrMax().then((v) => hrMax.value = v); _exercise?.hrMean().then((v) => hrMean.value = v); }); } }); final stream = Pedometer.stepCountStream; stepCount.bindStream(stream.map((event){ if(!_isStart){ return 0; } if(_initStepCount == -1){ _initStepCount = event.steps; return 0; } final stepCount = event.steps - _initStepCount; return stepCount; })); } @override Future onClose() async{ _exercise?.close(); _exercise=null; } var _isStart=false; final heartRate = 0.obs; final heartRatePercent = 0.0.obs; final ei = 0.0.obs; final ck = 0.0.obs; final kCal = 0.0.obs; final exerciseKcal = 0.0.obs; final hrMean = 0.obs; final hrMax = 0.obs; final stepCount = 0.obs; }