submit<T> method

Future<void> submit<T>([
  1. T? pModel
])

Implementation

Future<void> submit<T>([T? pModel]) async {
  final model = pModel ??
      (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(FormResultStatus.validationError);
    await Future.delayed(const Duration(milliseconds: 100));
    updateStatus(FormResultStatus.initialized);
  } else {
    state.formResultStatus = FormResultStatus.submitting;
    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);
      }
    }
  }
}