import 'package:aitrainer_app/repository/customer_repository.dart'; import 'package:flutter_form_bloc/flutter_form_bloc.dart'; class CustomerChangeFormBloc extends FormBloc { final CustomerRepository customerRepository; final emailField = TextFieldBloc( validators: [ FieldBlocValidators.required, ], ); final firstNameField = TextFieldBloc( validators: [ FieldBlocValidators.required, ], ); final nameField = TextFieldBloc(); final passwordField = TextFieldBloc( validators: [ //FieldBlocValidators.confirmPassword(passwordField), ], ); final birthYearField = TextFieldBloc(); final weightField = TextFieldBloc(); final genderField = SelectFieldBloc(); 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.toString()); weightField.updateInitialValue(customerRepository.customer.weight.toString()); genderField.updateInitialValue(customerRepository.getGenderByDBValue(customerRepository.sex)); 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); customerRepository.setSex(dbValue); }); } @override void onSubmitting() async { print("on Submitting Custom form"); try { emitLoading(progress: 30); // Emit either Loaded or Error await customerRepository.saveCustomer(); emitSuccess(canSubmitAgain: false); } 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(); } }