callPostApi static method

Future callPostApi(
  1. String endPoint,
  2. Map params, {
  3. bool hasAuth = true,
  4. bool hasEncoded = true,
  5. required String token,
  6. bool? defaultResponse,
  7. bool defaultResponseWithoutJsonDecode = false,
  8. bool? withStream,
  9. bool? utf8Convert,
  10. dynamic isTypeJson = true,
  11. Map<String, String>? customHeader,
  12. String? paramAsBody,
  13. String? changeLocalization,
  14. String tokenKey = 'Bearer ',
  15. bool? useDefaultURl,
  16. bool? showLogs,
  17. int? callTimeoutInSec,
  18. bool? usePreCheckFn,
  19. Future<T> httpCallPreFunction<T>()?,
  20. bool callHttpCallPreFunction = true,
  21. Future<T> httpCallPostFunction<T>()?,
  22. bool callHttpCallPostFunction = true,
})

Implementation

static Future<dynamic> callPostApi(
  String endPoint,
  Map params, {
  bool hasAuth = true,
  bool hasEncoded = true,
  required String token,
  bool? defaultResponse,
  bool defaultResponseWithoutJsonDecode = false,
  bool? withStream,
  bool? utf8Convert,
  isTypeJson = true,
  Map<String, String>? customHeader,
  String? paramAsBody,
  String? changeLocalization,
  String tokenKey = 'Bearer ',
  bool? useDefaultURl,
  bool? showLogs,
  int? callTimeoutInSec,
  bool? usePreCheckFn,
      Future<T> Function<T>()? httpCallPreFunction,
      bool callHttpCallPreFunction = true,
      Future<T> Function<T>()? httpCallPostFunction,
      bool callHttpCallPostFunction = true,
}) async {
  dynamic response;
  try {
    if(callHttpCallPreFunction){
      if(httpCallPreFunction != null){
        await httpCallPreFunction();
      }else{
        if(HttpCalls.httpCallPreFunction != null)await HttpCalls.httpCallPreFunction!();
      }
    }
    await callPreCheckFn(usePreCheckFn);
    showLog(params, showLog: showLogs, logName: endPoint);

    Uri url = HttpCalls.getRequestURL(endPoint, useDefaultURl: useDefaultURl);

    final Map<String, String> header = {};
    if ((localization ?? changeLocalization) != null) {
      header['X-localization'] = localization ?? changeLocalization ?? '';
      header['Accept-Language'] = localization ?? changeLocalization ?? '';
    }
    if (isTypeJson) {
      header[HttpHeaders.contentTypeHeader] = 'application/json';
    }

    if (hasAuth) {
      header[Static.httpCallTokenKey ?? HttpHeaders.authorizationHeader] =
          '${Static.canHttpCallAddBearerAsPreToken ? tokenKey : ''}$token';
    }
    if (headerAddOns != null) {
      header.addAll(headerAddOns!);
    }

    if (httpParamsAddOns != null) {
      params.addAll(httpParamsAddOns!);
    }


    showLog((customHeader ?? httpHeader ?? header),
        showLog: showLogs, logName: endPoint);

    if (withStream ?? httpCallsWithStream) {
      var request = http.Request('POST', url);
      request.body = paramAsBody ?? json.encode(params);
      request.headers.addAll(customHeader ?? httpHeader ?? header);
      var streamedResponse = await request.send().timeout(
          Duration(seconds: callTimeoutInSec ?? httpCallTimeoutInSec));
      var result = await Response.fromStream(streamedResponse);
      if (result.statusCode < Static.stopDecodingFromErrorCode) {
        if (utf8Convert ?? httpResponseUtf8Convert) {
          if (defaultResponseWithoutJsonDecode) {
            response = result;
          } else {
            response = HttpCalls.getDataObject(
                Response(utf8.decoder.convert(result.bodyBytes),
                    streamedResponse.statusCode),
                defaultResponse: defaultResponse);
          }

          showLog(utf8.decoder.convert(result.bodyBytes),
              enableJsonEncode: false, showLog: showLogs, logName: endPoint);
        } else {
          response = HttpCalls.getDataObject(result,
              defaultResponse: defaultResponse);
          showLog(result.body.toString(),
              enableJsonEncode: false, showLog: showLogs, logName: endPoint);
        }
      } else {
        throw Exception(result);
      }
    } else {
      var result = await http
          .post(url,
              headers: customHeader ?? httpHeader ?? header,
              body: paramAsBody ?? utf8.encode(json.encode(params)))
          .timeout(
              Duration(seconds: callTimeoutInSec ?? httpCallTimeoutInSec));
      if (result.statusCode < Static.stopDecodingFromErrorCode) {
        response =
            HttpCalls.getDataObject(result, defaultResponse: defaultResponse);

        showLog(result.body.toString(),
            enableJsonEncode: false, showLog: showLogs, logName: endPoint);
      } else {
        throw Exception(result);
      }
    }

    if(callHttpCallPostFunction){
      if(httpCallPostFunction != null){
        await httpCallPostFunction();
      }else{
        if(HttpCalls.httpCallPostFunction != null)await HttpCalls.httpCallPostFunction!();;
      }
    }
  } catch (e) {
    if (kDebugMode) {
      print(e);
    }
    response = errorHandler(e, response, defaultResponse);
  }

  return response;
}