request method

Future request({
  1. required String endpoint,
  2. HTTPMethod method = HTTPMethod.get,
  3. Map<String, dynamic>? parameters,
})

Implementation

Future<dynamic> request({
  required String endpoint,
  HTTPMethod method = HTTPMethod.get,
  Map<String, dynamic>? parameters,
}) async {
  final url = Uri.parse("$baseURL$endpoint");

  try {
    http.Response response;

    switch (method) {
      case HTTPMethod.get:
        Uri uri = url.replace(
          queryParameters: parameters?.map((k, v) => MapEntry(k, v.toString())),
        );
        response = await http.get(uri, headers: headers);
        break;

      case HTTPMethod.post:
        response = await http.post(url,
            headers: headers, body: jsonEncode(parameters));
        break;

      case HTTPMethod.put:
        response = await http.put(url,
            headers: headers, body: jsonEncode(parameters));
        break;

      case HTTPMethod.delete:
        response = await http.delete(url,
            headers: headers, body: jsonEncode(parameters));
        break;

      case HTTPMethod.patch:
        response = await http.patch(url,
            headers: headers, body: jsonEncode(parameters));
        break;

      default:
        throw Exception("HTTP method not implemented in Dart version");
    }

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return jsonDecode(response.body);
    } else {
      throw Exception(
          "Invalid response: ${response.statusCode}, ${response.body}");
    }
  } catch (e) {
    throw Exception("Request failed: $e");
  }
}