submit method

Future<void> submit(
  1. AbstractFormSubmitEvent event,
  2. Emitter<S> emit
)

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);
      }
    }
  }
}