httpCall method
Method used to make Http calls. Conveniently placed in this class to facilitate overrides.
Implementation
Future<HttpResponse> httpCall(Uri uri, String method,
{Object? body, Map<String, String>? headers, Encoding? encoding}) async {
http.Response response;
switch (method) {
case "post":
response = await http.post(uri,
body: body, headers: headers, encoding: encoding);
break;
case "put":
response = await http.put(uri,
body: body, headers: headers, encoding: encoding);
break;
case "patch":
response = await http.patch(uri,
body: body, headers: headers, encoding: encoding);
break;
case "delete":
response = await http.delete(uri, headers: headers);
break;
default:
response = await http.get(uri, headers: headers);
break;
}
// Error message handling
final responseBody = response.body;
var reasonPhrase = response.reasonPhrase;
if (!response.isSuccess && responseBody.isNotEmpty) {
try {
final map = json.decodeWithReviver(responseBody) as Map;
reasonPhrase = map["reasonPhrase"] ??
map["statusMessage"] ??
map["statusText"] ??
reasonPhrase;
} catch (e) {/* Do nothing*/}
}
return HttpResponse(
response.statusCode,
responseBody,
reasonPhrase: reasonPhrase,
headers: response.headers,
extra: {"response": response},
);
}