submit method

Future<void> submit()

Submits the DirectLink.

Implementation

Future<void> submit() async {
  state.focus.unfocus();

  DirectLinkSlug? slug;

  if (state.text.isNotEmpty) {
    try {
      slug = DirectLinkSlug(state.text);
    } on FormatException {
      state.error.value = 'err_invalid_symbols_in_link'.l10n;
    }
  }

  if (slug == null) {
    return;
  }

  if (state.error.value == null || state.resubmitOnError.isTrue) {
    state.editable.value = false;
    state.status.value = RxStatus.loading();

    try {
      await onAdded?.call(slug);
      pop?.call();
    } on UpdateDirectLinkException catch (e) {
      state.error.value = e.toMessage();
    } on UpdateGroupDirectLinkException catch (e) {
      state.error.value = e.toMessage();
    } catch (e) {
      state.resubmitOnError.value = true;
      state.error.value = 'err_data_transfer'.l10n;
      state.unsubmit();
      rethrow;
    } finally {
      state.status.value = RxStatus.empty();
      state.editable.value = true;
    }
  }
}