134 lines
3.9 KiB
Dart
134 lines
3.9 KiB
Dart
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<String, String> {
|
|
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<void> close() {
|
|
initialRMField.close();
|
|
quantity1Field.close();
|
|
unitQuantity1Field.close();
|
|
quantity2Field.close();
|
|
unitQuantity2Field.close();
|
|
quantity3Field.close();
|
|
unitQuantity3Field.close();
|
|
|
|
return super.close();
|
|
}
|
|
}
|