flutter fetch dynamic error data from JSON

Viewed 33

this is Laravel's default error response:

{
    "message": "The given data was invalid.",
    "errors": {
        "phone": [
            "validation.exists"
        ]
    }
}

and the values of "errors" are different in each error and request. how can I get "validation.exists" message?

1 Answers
import 'dart:convert';

String networkError(String errorValue) {
  String value = "";
  if (jsonDecode(errorValue)['errors'] != null) {
    Map<String, dynamic> errors = jsonDecode(errorValue)['errors'];
    final error = errors.values.first;
    if (!(error is String) && error.length > 0) {
      value = error[0];
    } else {
      value = error;
    }
  } else if (jsonDecode(errorValue)["message"] != null) {
    value = jsonDecode(errorValue)["message"];
  } else {
    value = jsonDecode(errorValue)["error"];
  }
  return value;
}

usage

Future<String> fetch() async {
    var url = Uri.parse('https://example.com/whatsit/create');
    var response =
        await http.post(url, body: {'name': 'doodle', 'color': 'blue'});
    print('Response status: ${response.statusCode}');
    print('Response body: ${response.body}');
    if (response.statusCode == 200) {
      return "Success YES";
    } else {
      //!HERE ON ERROR
      return networkError(response.body.toString());
    }
  }
Related