get<T> static method

Future<T> get<T>({
  1. required String from,
  2. bool returnRawResponse = false,
  3. T onSuccess(
    1. Map<String, dynamic>
    )?,
})

Implementation

static Future<T> get<T>({
  required String from,
  bool returnRawResponse = false,
  T Function(Map<String, dynamic>)? onSuccess,
}) async {
  AILogger.log("starting request to $from");
  final http.Response response = await http.get(
    Uri.parse(from),
    headers: AIConfigBuilder.instance.headers(),
  );

  if (returnRawResponse) {
    return response.body as T;
  }
  AILogger.log(
      "request to $from finished with status code ${response.statusCode}");

  AILogger.log("starting decoding response body");
  Utf8Decoder utf8decoder = const Utf8Decoder();
  final Map<String, dynamic> decodedBody =
      jsonDecode(utf8decoder.convert(response.bodyBytes))
          as Map<String, dynamic>;

  AILogger.log("response body decoded successfully");
  if (decodedBody['error'] != null) {
    AILogger.log("an error occurred, throwing exception");
    final Map<String, dynamic> error = decodedBody['error'];
    throw AIRequestException(
      error["message"],
      response.statusCode,
    );
  } else {
    AILogger.log("request finished successfully");
    return onSuccess!(decodedBody);
  }
}