request method

  1. @override
Future<RestResponse<String>> request({
  1. required RestMethod method,
  2. required String path,
  3. Map<String, dynamic> requestBody = const {},
})
override

The Uri for the request is built inside ResApi, to give flexibility on how it is used. The path parameter corresponds to the Uri path, which doesn't hold the host, port and scheme.

Implementation

@override
Future<RestResponse<String>> request({
  required RestMethod method,
  required String path,
  Map<String, dynamic> requestBody = const {},
}) async {
  assert(path.isNotEmpty);

  Response? response;
  Uri uri = Uri.parse(baseUrl + path);

  try {
    switch (method) {
      case RestMethod.get:
        response = await _httpClient.get(uri, headers: _headers);
        break;
      case RestMethod.post:
        response = await _httpClient.post(uri,
            headers: _headers, body: json.encode(requestBody));
        break;
      case RestMethod.put:
        response = await _httpClient.put(uri,
            headers: _headers, body: json.encode(requestBody));
        break;
      case RestMethod.delete:
        response = await _httpClient.delete(uri, headers: _headers);
        break;
      case RestMethod.patch:
        response = await _httpClient.patch(uri,
            headers: _headers, body: json.encode(requestBody));
        break;
    }

    return RestResponse<String>(
      type: getResponseTypeFromCode(response.statusCode),
      uri: uri,
      content: response.body,
    );
  } on ClientException {
    return RestResponse<String>(
      type: getResponseTypeFromCode(response?.statusCode),
      uri: uri,
      content: response?.body ?? '',
    );
  } catch (e) {
    return RestResponse<String>(
      type: RestResponseType.unknown,
      uri: uri,
      content: '',
    );
  }
}