#flutter #dart
#трепетание #dart
Вопрос:
Предположим, у меня есть объект json, подобный этому:
{
"sort": "asc",
"page": {
"next": "asdfg",
"prev": "kljekj"
}
}
Я написал модель данных в dart следующим образом:
class AllPage{
String sort;
Page page;
AllPage({this.sort, this.page});
AllPage.fromJson(Map<String, dynamic> json) {
return AllPage(
sort = json['sort'],
page = Page.fromJson(json['page']));
}
}
class Page {
String next;
String prev;
Page({this.next, this.prev});
Page.fromJson(Map<String, dynamic> json) {
return Page(
next = json['next'],
prev = json['prev']);
}
}
Я видел бесчисленное множество примеров, в которых это работает. Однако я получаю сообщение об ошибке в моем классе AppPage, внутри страницы.FromJSON(json[‘страница’]).
Ошибка гласит: «Тип аргумента «динамический» не может быть присвоен типу параметра «Карта>строка, динамический>».
Я новичок в flutter / dart. Так что это может быть что-то простое, чего мне не хватает. Любая помощь приветствуется. Спасибо!
Ответ №1:
json['page']
возвращает динамическое значение, поскольку оно может быть действительно любым. Вам нужно выполнить некоторое приведение
class AllPage {
String sort;
Page page;
AllPage({this.sort, this.page});
factory AllPage.fromJson(Map<String, dynamic> json) {
return AllPage(
sort: json['sort'].toString(),
page: Page.fromJson(json['page'] as Map),
);
}
}
class Page {
String next;
String prev;
Page({this.next, this.prev});
factory Page.fromJson(Map json) {
return Page(
next: json['next'].toString(),
prev: json['prev'].toString(),
);
}
}
Обратите внимание, что он многое предполагает о структуре json. Вы должны добавить проверки, например, что, если json['page']
или json['next']
равно нулю.
Также исправлены некоторые проблемы с компиляцией, связанные с использованием конструкторов
Комментарии:
1. Это избавило от ошибки. Я отмечу ответ, как только у меня будет возможность проверить это. Но, похоже, это исправляет проблему. Спасибо!