submit<T> method

Future<T?> submit<T>(
  1. Future<T> action(
    1. Map<String, Object?> data
    ), {
  2. void onSuccess(
    1. T result
    )?,
  3. void onError(
    1. Object error
    )?,
  4. void onValidationError(
    1. FormErrors errors
    )?,
  5. bool resetOnSuccess = false,
})

Runs action with current data and updates submit state.

Implementation

Future<T?> submit<T>(
  Future<T> Function(Map<String, Object?> data) action, {
  void Function(T result)? onSuccess,
  void Function(Object error)? onError,
  void Function(FormErrors errors)? onValidationError,
  bool resetOnSuccess = false,
}) async {
  processing = true;
  wasSuccessful = false;
  recentlySuccessful = false;
  clearErrors();

  try {
    final result = await action(data);
    wasSuccessful = true;
    recentlySuccessful = true;
    if (resetOnSuccess) reset();
    onSuccess?.call(result);
    return result;
  } catch (error) {
    final validationErrors = FormErrors.from(error);
    if (validationErrors.isNotEmpty) {
      errors = validationErrors;
      onValidationError?.call(validationErrors);
    }
    onError?.call(error);
    return null;
  } finally {
    processing = false;
    _notifyListeners();
  }
}