#oop #dart
#ооп #dart
Вопрос:
У меня есть этот класс (dart)
class ResumenPublicaciones {
String name;
String count;
ResumenPublicaciones({this.name, this.count});
// named constructor
ResumenPublicaciones.fromJson(Map<String, dynamic> json)
: name = json['name'],
count = json['count'].toString();
}
Я хочу сопоставить этот ответ с API
[{"name":"Administración","count":37},{"name":"Call Center,
Teletrabajo y Telemarketing","count":4},{"name":"Compras,
Importaciones, Logística, Distribución","count":10}]
вот как я это делаю….
class ServicioResumenEmpleos {
List<ResumenPublicaciones> publicaciones = [];
List getResumenPublicacioness() {
publicacionesResumidas();
return publicaciones;
}
var apiUrl = "here my api URLs";
Future<ResumenPublicaciones> publicacionesResumidas() async {
var jsonResponse;
Map<String, String> headers = {
'Content-Type': 'application/json',
};
var response = await http.get(apiUrl, headers: headers);
print('respuesta del api' response.toString());
if (response.statusCode == 200) {
print(' el API responde ' response.body);
jsonResponse = json.decode(response.body);
var _listapublicaciones = new ResumenPublicaciones.fromJson(jsonResponse);
publicaciones.add(_listapublicaciones);
print(_listapublicaciones.name);
return _listapublicaciones;
} else {
print(
'Esta imprimiendo el else en este punto no debe impremir el response');
var _listapublicacionesNull = new ResumenPublicaciones();
_listapublicacionesNull.count = '0';
_listapublicacionesNull.name = 'didnt work';
return _listapublicacionesNull;
}
}
//
}
Я хочу получить список по классу, но я получаю сообщение об ошибке
Произошло исключение.
**_TypeError (type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>')**
есть идеи, что я делаю не так?
Ответ №1:
Проблема вот в чем:
var _listapublicaciones = new ResumenPublicaciones.fromJson(jsonResponse);
Если ваш ответ представляет собой список, вы передаете его конструктору, который ожидает Map
. Вам нужно выполнить итерацию по объектам вашего списка и преобразовать их в отдельные общедоступные объекты:
var _listapublicaciones = (jsonResponse as List).map(
(o) => ResumenPublicaciones.fromJson(o),
).toList();
Комментарии:
1. Или:
var _listapublicaciones = [for (var json in jsonResponse) ResumenPublicaciones.fromJson(json)];
2. обязательно измените свой метод на : Future<Список<Возобновление публикаций>> publicacionesResumidas()