import 'package:aitrainer_app/repository/customer_repository.dart'; import 'package:flutter_form_bloc/flutter_form_bloc.dart'; class CustomerChangeFormBloc extends FormBloc { final CustomerRepository customerRepository; int weight = 60; int birthYear = 1990; final emailField = TextFieldBloc( validators: [ FieldBlocValidators.required, ], ); final firstNameField = TextFieldBloc( validators: [ FieldBlocValidators.required, ], ); final nameField = TextFieldBloc(); final passwordField = TextFieldBloc( validators: [ //FieldBlocValidators.confirmPassword(passwordField), ], ); final birthYearField = InputFieldBloc(initialValue: 1990); final weightField = InputFieldBloc(initialValue: 60); final genderField = InputFieldBloc(initialValue: 0); final goalField = TextFieldBloc(); CustomerChangeFormBloc({this.customerRepository}) { addFieldBlocs(fieldBlocs: [ emailField, firstNameField, nameField, passwordField, birthYearField, weightField, genderField, goalField, ]); emailField.updateInitialValue(customerRepository.customer.email); firstNameField.updateInitialValue(customerRepository.customer.firstname); nameField.updateInitialValue(customerRepository.customer.name); birthYearField.updateInitialValue(customerRepository.customer.birthYear); weightField.updateInitialValue(customerRepository.customer.getProperty("weight").toInt()); int initialGender = customerRepository.getGenderByDBValue(customerRepository.sex) == "m" ? 0 : 1; genderField.updateInitialValue(initialGender); firstNameField.onValueChanges(onData: (previous, current) async* { customerRepository.setFirstName(current.value); }); nameField.onValueChanges(onData: (previous, current) async* { customerRepository.setName(current.value); }); /*birthYearField.onValueChanges(onData: (previous, current) async* { customerRepository.setBirthYear(current.valueToInt); }); weightField.onValueChanges(onData: (previous, current) async* { customerRepository.setWeight(current.valueToInt); }); customerRepository.genders.forEach((element) { genderField.addItem(element.name); });*/ genderField.onValueChanges(onData: (previous, current) async* { String dbValue = customerRepository.getGenderByName(current.value.toString()); customerRepository.setSex(dbValue); }); } int getGender() { return customerRepository.customer.sex == "M" ? 0 : 1; } void switchGender(int index) { String dbValue; if (index == 0) { dbValue = customerRepository.getGenderByName("Man"); } else if (index == 1) { dbValue = customerRepository.getGenderByName("Woman"); } customerRepository.setSex(dbValue); genderField.add(UpdateFieldBlocValue(dbValue)); } void changeWeight(int value) { customerRepository.setWeight(value); weight = value; weightField.updateValue(value); } changeBirthYear(int value) { customerRepository.setBirthYear(value); birthYear = value; birthYearField.updateValue(value); } @override void onSubmitting() async { try { emitLoading(progress: 30); // Emit either Loaded or Error await customerRepository.saveCustomer(); emitSuccess(canSubmitAgain: true); } on Exception catch (ex) { emitFailure(failureResponse: ex.toString()); } } @override Future close() { emailField.close(); firstNameField.close(); nameField.close(); passwordField.close(); birthYearField.close(); weightField.close(); genderField.close(); goalField.close(); return super.close(); } }