executeUpload<T> static method

Future<YKResult<T>> executeUpload<T>(
  1. List<YKInterceptor> interceptors,
  2. int maxRetries,
  3. YKNetworkingRequest request, {
  4. int retryCount = 0,
  5. Set<String>? retrySkipNames,
})

Implementation

static Future<YKResult<T>> executeUpload<T>(
  List<YKInterceptor> interceptors,
  int maxRetries,
  YKNetworkingRequest request, {
  int retryCount = 0,
  Set<String>? retrySkipNames,
}) async {
  if (request.fileLocalPath == null) {
    return YKFailure<T>(
      exception: const YKNetworkException(type: YKErrorType.unknown, message: 'No file to upload'),
      retryCount: retryCount,
    );
  }

  final dio = YKNetworkingConfig.getInstance().dio;
  return _executeWithChain<T>(
    interceptors: interceptors,
    maxRetries: maxRetries,
    request: request,
    retryCount: retryCount,
    retrySkipNames: retrySkipNames,
    transport: () async {
      FormData formData;
      if (request.params != null && request.params!.isNotEmpty) {
        final params = Map<String, dynamic>.from(request.params!);
        params[request.formName] = await MultipartFile.fromFile(request.fileLocalPath!, filename: request.fileName);
        formData = FormData.fromMap(params);
      } else {
        formData = FormData.fromMap({
          request.formName: await MultipartFile.fromFile(request.fileLocalPath!, filename: request.fileName),
        });
      }

      final config = YKNetworkingConfig.getInstance();
      dio.options.baseUrl = request.baseUrl;
      final dioResponse = await dio.post(
        request.path,
        data: formData,
        options: Options(
          sendTimeout: Duration(seconds: config.timeOut),
          receiveTimeout: Duration(seconds: config.receiveTimeout),
          headers: request.commheader,
          contentType: request.contentType?.value(),
        ),
        cancelToken: request.cancelToken,
        onSendProgress: request.progressCallBack,
      );
      return YKInterceptorResponse(
        data: dioResponse.data,
        statusCode: dioResponse.statusCode ?? 200,
        headers: dioResponse.headers.map,
        request: request,
      );
    },
  );
}