submit<T> method
Submits the form with optional model data.
pModel: Optional model data to submit.
Implementation
Future<void> submit<T>([T? pModel]) async {
if ((state as AbstractFormBaseState).isSubmitting) {
return;
}
final model =
pModel ??
(state is AbstractFormBasicState
? (state as AbstractFormBasicState).model
: null);
final isValid = state is AbstractFormState
? (state as AbstractFormState).modelValidator?.validate(model) ?? false
: true;
if (!isValid) {
(state as AbstractFormState).autovalidate = true;
updateStatus(FormResultStatus.validationError);
await Future.delayed(const Duration(milliseconds: 100));
updateStatus(FormResultStatus.initialized);
} else {
state.formResultStatus = FormResultStatus.submitting;
if (state is AbstractFormBasicState) {
(state as AbstractFormBasicState).model = model;
}
updateState(state.copyWith());
final result = model != null
? await onSubmit(model)
: await onSubmitEmpty();
if (result.isSuccess) {
await onSubmitSuccess(result);
success();
} else {
if (result.isConnectionError) {
try {
final localResult = model != null
? await onSubmitLocal(model)
: await onSubmitEmptyLocal();
if (localResult.isLocalSuccess) {
await onSubmitLocalSuccess(result);
} else {
await onSubmitLocalError(result);
}
} catch (e) {
model != null
? await onConnectionSubmitError(result, model)
: await onConnectionSubmitEmptyError(result);
}
} else {
await onSubmitError(result);
}
}
}
}