Вставлять массив в порхание списка

#flutter #dart

#флаттер #dart

Вопрос:

Итак, я пытаюсь создать список с объектами типа ‘MessageListItem’. Я пытаюсь вставить данные, возвращенные из моего API, в список. Переменная, в которую я хочу ее вставить, — это «сообщения». Я получаю сообщение об ошибке в функции ‘GetMessages ()’.

Ошибка, которую я получаю: значение типа ‘MessageListItem’ не может быть присвоено переменной типа ‘List’.

Вызов API и код:

 List<MessageListItem> messages;

getMessages() async {
    List<MessageListItem> res = MessageListItem.fromJson(await getMessageList()); 
    // I'm getting the error on the line above. 
    print(res);
  }

Future<dynamic> getMessageList() async {
  final response = await http.get(baseUrl   'message/jxchumber');
  print(response.statusCode);

  if (response.statusCode == 200) {
    var res = json.decode(response.body);
    return res;
  } else {
    throw Exception('Failed to get data');
  }
}
 

Класс MessageListItem

 class MessageListItem {
  int id;
  int senderId;
  int recipientId;
  String senderUsername;
  String recipientUsername;
  int itemId;
  String messageContentString;
  bool read;
  dynamic dateTimeSent;

  MessageListItem(
      {this.id,
      this.senderId,
      this.recipientId,
      this.senderUsername,
      this.recipientUsername,
      this.itemId,
      this.messageContentString,
      this.read,
      this.dateTimeSent});

  factory MessageListItem.fromJson(Map<String, dynamic> json) {
    return MessageListItem(
      id: json['id'],
      senderId: json['senderId'],
      recipientId: json['recipientId'],
      senderUsername: json['senderUsername'],
      recipientUsername: json['recipientUsername'],
      itemId: json['itemId'],
      messageContentString: json['messageContentString'],
      read: json['read'],
      dateTimeSent: json['dateTimeSent'],
    );
  }
}
 

Данные, возвращаемые из API, являются:

 [
    {
        "id": 4,
        "senderId": 1,
        "recipientId": 3,
        "senderUsername": "jxchumber",
        "recipientUsername": "pavster31",
        "itemId": 0,
        "messageContentString": "hello1",
        "read": false,
        "dateTimeSent": "2020-12-14T22:23:55.1473414"
    },
    {
        "id": 3,
        "senderId": 1,
        "recipientId": 9,
        "senderUsername": "jxchumber",
        "recipientUsername": "larsen",
        "itemId": 0,
        "messageContentString": "hello1",
        "read": false,
        "dateTimeSent": "2020-12-14T16:04:50.8232055"
    }
]
 

Я пытаюсь вставить его в переменную «сообщения»

Ответ №1:

Попробуйте это

  getMessages() async {
    var list = await getMessageList();
    List<MessageListItem> res = list.map((i)=>MessageListItem.fromJson(i)).toList();
 }