submit method
Implementation
Future<void> submit(AbstractFormSubmitEvent event, Emitter<S> emit) async {
final model = event.model ??
(state is AbstractFormBasicState
? (state as AbstractFormBasicState).model
: null);
if (state is AbstractFormState &&
!((state as AbstractFormState).modelValidator?.validate(model) ??
true)) {
(state as AbstractFormState).autovalidate = true;
updateStatus(emit, FormResultStatus.validationError);
await Future.delayed(const Duration(milliseconds: 100));
updateStatus(emit, FormResultStatus.initialized);
} else {
state.formResultStatus = FormResultStatus.submitting;
updateState(state.copyWith(), emit);
final result =
model != null ? await onSubmit(model) : await onSubmitEmpty();
if (result.isSuccess) {
await onSubmitSuccess(result, emit);
success();
} else {
if (result.isConnectionError) {
try {
final localResult = model != null
? await onSubmitLocal(model)
: await onSubmitEmptyLocal();
if (localResult.isLocalSuccess) {
await onSubmitLocalSuccess(result, emit);
} else {
await onSubmitLocalError(result, emit);
}
} catch (e) {
model != null
? await onConnectionSubmitError(result, model, emit)
: await onConnectionSubmitEmptyError(result, emit);
}
} else {
await onSubmitError(result, emit);
}
}
}
}