post method

Future post(
  1. String path, {
  2. Map<String, dynamic>? data,
  3. bool infiniteTimeout = false,
  4. bool overrideBody = false,
  5. Map<String, dynamic>? header,
})

Implementation

Future<dynamic> post(String path, {Map<String, dynamic>? data,
  bool infiniteTimeout = false, bool overrideBody = false, Map<String, dynamic>? header,}) async {
  try {
    // Backup current timeout settings
    final originalConnectTimeout = _dio.options.connectTimeout;
    final originalReceiveTimeout = _dio.options.receiveTimeout;

    // Apply infinite timeout if requested
    if (infiniteTimeout) {
      _dio.options.connectTimeout = Duration.zero; // 0 = infinite
      _dio.options.receiveTimeout = Duration.zero;
    }

    Options? requestOptions;

    if(header != null) {
      requestOptions = Options(
        extra: {
          "header": header,
        },
      );
    }

    dynamic body;
    if (overrideBody) {
      body = jsonEncode(data ?? {});
    } else if (UFUtils.applyEncryption) {
      body = AESUtil.secKeyEncryptWithBodyAppKey(data ?? {});
    } else {
      body = jsonEncode(data ?? {});
    }

    final response = await _dio.post(UFUtils.baseUrl + path, data: body, options: requestOptions);

    // Restore original timeout settings
    if (infiniteTimeout) {
      _dio.options.connectTimeout = originalConnectTimeout;
      _dio.options.receiveTimeout = originalReceiveTimeout;
    }

    return response.data;
  } catch (e) {
    rethrow;
  }
}