request<TData, TResponse> method
Future<RestResponse<TResponse> >
request<TData, TResponse>(
- ApiRequestMethod method,
- RoutePattern endpoint,
- Map<
String, dynamic> urlParams, { - Map<
String, List< headers = const {},String> > - Map<
String, String?> query = const {}, - dynamic body,
- TransferBean<
TData> ? bean,
Implementation
Future<RestResponse<TResponse>> request<TData, TResponse>(
ApiRequestMethod method,
RoutePattern endpoint,
Map<String, dynamic> urlParams, {
Map<String, List<String>> headers = const {},
Map<String, String?> query = const {},
dynamic body,
TransferBean<TData>? bean,
}) async {
final uri = _httpClient.address.replace(
path: endpoint.encode(urlParams),
queryParameters: query.isNotEmpty ? query : null,
);
final requestHeaders = {
...headers,
if (auth != null) HttpHeaders.authorization: [auth!.authorization],
};
final bodyData = () {
if (body is Uint8List) {
requestHeaders[HttpHeaders.contentType] = [Mime.octetStream];
return Stream.value(body);
} else if (body is String) {
if (!requestHeaders.containsKey(HttpHeaders.contentType)) {
requestHeaders[HttpHeaders.contentType] = [
'${Mime.plainText}; charset=UTF-8'
];
}
return Stream.value(utf8.encode(body));
} else if (body is HttpFormData) {
requestHeaders[HttpHeaders.contentType] = [Mime.formData];
return Stream.value(utf8.encode(body.toString()));
} else if (body != null) {
requestHeaders[HttpHeaders.contentType] = [
'${Mime.json}; charset=UTF-8'
];
return Stream.value(utf8.encode(jsonEncode(body)));
} else {
return Stream<List<int>>.empty();
}
}();
final response = await _httpClient
.request(HttpRequest(method, uri, requestHeaders, bodyData));
return await handleResponse<TData, TResponse>(response, bean);
}