uploadFile method

Future<RxResult<T>> uploadFile({
  1. ProgressCallback? onSendProgress,
})

Implementation

Future<RxResult<T>> uploadFile({
  adapter.ProgressCallback? onSendProgress,
}) async {
  if (!(await _checkNetWork())) {
    return RxResult.error(NetworkException("Network not available"));
  }

  final url = _buildFinalUrl();
  final payload = _resolveRequestPayload();

  try {
    final adapterRequest = _buildAdapterRequest(
      url: url,
      queryParams: payload.queryParams,
      data: payload.body,
      contentType: payload.contentType,
    );

    final adapter = _requireAdapter();
    final response = await adapter.upload(
      adapterRequest,
      onProgress: onSendProgress,
    );

    onResponse?.call(response);
    if (response.isSuccess) {
      T data;
      if (_jsonTransformation != null) {
        data = await _jsonTransformation!.call(response.data) as T;
      } else {
        data = response.data as T;
      }
      return RxResult(value: data, model: SourcesType.net);
    } else {
      throw NetworkException(
          "Upload failed with status code ${response.statusCode}", null);
    }
  } on AdapterException catch (e) {
    if (e.type == AdapterExceptionType.cancel) {
      throw CancellationException("Upload was cancelled", e);
    }
    throw NetworkException(e.message, e);
  } catch (e) {
    if (e is RxError) rethrow;
    throw NetworkException("Upload failed: $e", e);
  }
}