#flutter
#flutter
Вопрос:
Я получаю этот ответ от API:
[
{
"id": 1,
"company_id": 2,
"surname": "Surname",
"name": "Name",
"employee_position_id": 1,
"phone_number": " xxx xxx xxx xxx",
"email": "mail@mail.mail",
"user_id": 1,
"contact_level": null,
"created_at": "2020-10-03T16:50:59.000000Z",
"updated_at": "2020-10-03T17:05:54.000000Z",
"deleted_at": null,
"full_name": "Surname Name",
"position_name": "IT",
"company_name": "Company One"
}
]
Согласно каждому руководству, которое я нашел, этот код должен работать:
void _getContacts() async {
var res = await Network().getData('/contacts');
final Map<String, dynamic> body = json.decode(res.body);
// print(body.runtimeType);
}
Однако это выдает мне эту ошибку:
E/flutter (23716): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
Когда я печатаю body.runtimeType
, там написано List<dynamic>
Я дважды проверил, я все проверил, json, кажется, в правильном формате, весь код, кажется, написан правильно.
Как это возможно, что это дает мне List
вместо a Map
? и как мне заставить json.decode предоставить мне карту вместо списка?
Ответ №1:
Есть список, который вы должны повторить. если в вашем списке есть только один объект, вы можете использовать его следующим образом
void _getContacts() async {
var res = await Network().getData('/contacts');
var response= json.decode(res.body);
final Map<String, dynamic> body = response[0];
// print(body.runtimeType);
}
если в вашем списке более одного объекта, вы можете использовать его следующим образом
void _getContacts() async {
var res = await Network().getData('/contacts');
var response= json.decode(res.body);
final Map<String, dynamic> body = response.map((e)=>e);
// print(body.runtimeType);
}
Комментарии:
1. спасибо, для меня это шаг вперед, однако следующая ошибка появилась сразу после
E/flutter (23716): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: type 'MappedListIterable<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'
того, что сейчас?2. лучше сделать из него класс модели, используя javiercbk.github.io/json_to_dart ссылка и есть
fromJson
метод, который преобразует JSON в ваш класс модели3. Не сэр, Абхи @narrei