Сопоставление классов с использованием dart

#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()