В любом случае вы получите объект Response. Согласно документации DIO Handling Errors , он вернет объект DioError.
// DIO Example
Response response = await dio.get('https://google.com');
print(response.statusCode); // 500
print(response.data); // Contains a Dio Error object
Пакет HTTP работает аналогично.
var url = 'https://example.com/whatsit/create';
var response = await http.post(url, body: {'name': 'doodle', 'color': 'blue'});
print(response.statusCode); // 500
print(response.body); // Error message
Это означает, что в любом случае вы напрямую не получаете сообщение об ошибке для Flutter, вы должны обработать ошибку самостоятельно. Например, вы можете выдать ошибку, если код состояния не равен 200.
if(response.statusCode == 200){
// everything works as expected
} else {
throw Error();
}