import 'package:aitrainer_app/repository/exercise_repository.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_form_bloc/flutter_form_bloc.dart'; class ExerciseControlFormBloc extends FormBloc { final ExerciseRepository exerciseRepository; int step = 1; final double percentToCalculate; final initialRMField = TextFieldBloc( ); final quantity1Field = TextFieldBloc( ); final unitQuantity1Field = TextFieldBloc( ); final quantity2Field = TextFieldBloc( ); final unitQuantity2Field = TextFieldBloc( ); final quantity3Field = TextFieldBloc( ); final unitQuantity3Field = TextFieldBloc( ); ExerciseControlFormBloc({this.exerciseRepository, this.percentToCalculate}) { addFieldBlocs(fieldBlocs: [ initialRMField, quantity1Field, unitQuantity1Field, quantity2Field, unitQuantity2Field, quantity3Field, unitQuantity3Field, ]); initialRMField.updateInitialValue(calculate1RM(percent75: false).toStringAsFixed(0)); unitQuantity1Field.updateInitialValue(calculate1RM(percent75: true).toStringAsFixed(0)); unitQuantity2Field.updateInitialValue(calculate1RM(percent75: true).toStringAsFixed(0)); unitQuantity3Field.updateInitialValue(calculate1RM(percent75: true).toStringAsFixed(0)); quantity1Field.onValueChanges(onData: (previous, current) async* { exerciseRepository.setQuantity(current.valueToDouble); }); unitQuantity1Field.onValueChanges(onData: (previous, current) async* { exerciseRepository.setUnitQuantity(current.valueToDouble); }); quantity2Field.onValueChanges(onData: (previous, current) async* { exerciseRepository.setQuantity(current.valueToDouble); }); unitQuantity2Field.onValueChanges(onData: (previous, current) async* { exerciseRepository.setUnitQuantity(current.valueToDouble); }); quantity3Field.onValueChanges(onData: (previous, current) async* { exerciseRepository.setQuantity(current.valueToDouble); }); unitQuantity3Field.onValueChanges(onData: (previous, current) async* { exerciseRepository.setUnitQuantity(current.valueToDouble); }); } @override void onLoading() { step = 1; super.onLoading(); } @override void onSubmitting() async { print("on Submitting Custom form"); try { emitLoading(progress: 30); if ( step == 1) { //unitQuantity2Field.updateInitialValue(calculate1RM(percent75: true).toStringAsFixed(0)); //unitQuantity3Field.updateInitialValue(calculate1RM(percent75: true).toStringAsFixed(0)); step = 2; } else if ( step == 2) { //unitQuantity3Field.updateInitialValue(calculate1RM(percent75: true).toStringAsFixed(0)); step = 3; } else if ( step == 3 ) { //updatedRMField.updateInitialValue(calculate1RM(percent75: false).toStringAsFixed(0)); } //await exerciseRepository.addExercise(); emitSuccess(canSubmitAgain: true); } on Exception catch (ex) { emitFailure(failureResponse: ex.toString()); } } double calculate1RM({bool percent75}) { if (exerciseRepository.exercise == null) { exerciseRepository.getLastExercise(); } double weight = exerciseRepository.exercise.unitQuantity; double repeat = exerciseRepository.exercise.quantity; if ( weight == 0 || repeat == 0) { return 0; } double rmWendler = weight * repeat * 0.0333 + weight; double rmOconner = weight * (1 + repeat / 40); double average = (rmWendler + rmOconner) / 2; return percent75 ? average * this.percentToCalculate : average; } //@override Future close() { initialRMField.close(); quantity1Field.close(); unitQuantity1Field.close(); quantity2Field.close(); unitQuantity2Field.close(); quantity3Field.close(); unitQuantity3Field.close(); return super.close(); } }