submit method
Handles form submission.
The form is fully validated before any submit hook or use case is run. If validation fails, or if any required async field work is still pending, submission is blocked.
Implementation
Future<void> submit(
BlocxFormEventSubmit event,
Emitter<BlocxFormState<F, E>> emit,
) async {
try {
await validateForm(formData, forceFullValidation: true);
if (!isFormSubmittable) {
emitState(emit);
return;
}
final proceed = await doBeforeSubmit(emit);
if (!proceed) {
emitState(emit);
return;
}
emit(
BlocxFormStateSubmittingForm(
formData: formData,
step: stepIndex,
),
);
final result = await submitUseCaseTask.execute();
if (result.isFailure) {
handleError(result.error!, emit);
emitState(emit);
return;
}
final shouldEmit = await onFormSubmitted(emit, result);
if (shouldEmit) {
emit(
BlocxFormStateFormSubmitted(
submittedData: result.data,
formData: formData,
),
);
}
emitState(emit);
} catch (e, s) {
emitState(emit);
handleError(e, emit, stacktrace: s);
}
}