sendRequest method

CancellableRequest<Response> sendRequest(
  1. String method,
  2. String endpoint, {
  3. dynamic data,
  4. Map<String, String>? headers,
  5. bool isMultipart = false,
  6. Duration? timeout,
  7. String? baseUrlOverride,
})

Implementation

CancellableRequest<http.Response> sendRequest(
  String method,
  String endpoint, {
  dynamic data,
  Map<String, String>? headers,
  bool isMultipart = false,
  Duration? timeout,
  String? baseUrlOverride,
}) {
  final effectiveTimeout = timeout ?? requestTimeout;
  final effectiveBaseUrl = baseUrlOverride ?? baseUrl;
  final url = Uri.parse('$effectiveBaseUrl/$endpoint');
  Future<http.Response> future;

  if (isMultipart) {
    future = sendMultipartRequest(
      method,
      url,
      data: data,
      headers: headers,
      client: _client,
    ).timeout(effectiveTimeout);
  } else {
    switch (method.toUpperCase()) {
      case 'GET':
        future = _client.get(url, headers: headers).timeout(effectiveTimeout);
        break;
      case 'POST':
        future = _client
            .post(url, headers: headers, body: jsonEncode(data))
            .timeout(effectiveTimeout);
        break;
      case 'PATCH':
        future = _client
            .patch(url, headers: headers, body: jsonEncode(data))
            .timeout(effectiveTimeout);
        break;
      case 'PUT':
        future = _client
            .put(url, headers: headers, body: jsonEncode(data))
            .timeout(effectiveTimeout);
        break;
      case 'DELETE':
        future = _client
            .delete(url, headers: headers)
            .timeout(effectiveTimeout);
        break;
      default:
        throw UnsupportedError('HTTP method $method not supported');
    }
  }

  future = future.whenComplete(() {});
  return _CancellableRequestWithCallback(_client, future, () {});
}