post method

Implementation

Future<NetworkResponseObject<T>> post() async {
  if (endPointType.contentType != 'multipart/form-data') {
    _dio.interceptors.add(CurlLoggerInterceptor());
  }

  var url = endPointType.url;

  if (path != null) {
    for (var i = 0; i < path!.length; i++) {
      final key = ':i${i == 0 ? '' : i}d';
      url = url.replaceAll(key, path![i]);
    }
  }

  try {
    late Response response;
    switch (endPointType.httpMethod) {
      case EndpointHTTPType.get:
        response = await _dio.get(url, queryParameters: params);
        break;
      case EndpointHTTPType.post:
        response = await _dio.post(url, data: params);
        break;
      case EndpointHTTPType.put:
        response = await _dio.put(url, data: params);
        break;
      case EndpointHTTPType.delete:
        response = await _dio.delete(url, data: params);
        break;
      case EndpointHTTPType.patch:
        response = await _dio.patch(url, data: params);
        break;
      case EndpointHTTPType.postMultipart:
        response = await _dio.post(
          url,
          data: formData,
          onReceiveProgress: onReceiveProgress,
          onSendProgress: onSendProgress,
          cancelToken: cancelToken,
        );

        break;
    }

    Logger.logMessage(title: 'API SUCCESS - $url \n\n', message: 'data: ${response.data}');

    return NetworkResponseObject(itemFromJson: itemFromJson).fromJson(response.data!);
  } on DioException catch (error, stacktrace) {
    Logger.logMessage(title: 'API FAILURE - $url \n\n', message: 'error: $error, \nstacktrace: $stacktrace \n\n');
    var errorMessage = 'Something Went Wrong';
    if (CancelToken.isCancel(error)) {
      errorMessage = error.message ?? errorMessage;
    }

    return NetworkResponseObject.fromDetail(false, errorMessage);
  } catch (error, stacktrace) {
    Logger.logMessage(title: 'API FAILURE - $url \n\n', message: 'error: $error, \nstacktrace: $stacktrace \n\n');

    return NetworkResponseObject.fromDetail(false, 'Something Went Wrong');
  }
}