Мне было интересно, может ли кто-нибудь помочь, пожалуйста? Я новичок в Flutter / Dart и пытаюсь разобрать вложенный ответ JSON в модель. Я использовал генератор JSON to Dart, который, похоже, работал хорошо, за исключением случаев, когда он анализирует ответы.
Я подозреваю, что проблема в том, что ответы различаются по результатам — иногда это может быть ноль, один массив или несколько.
Запуск .runtimeType показал мне, что он может возвращать null, если он пуст, List<dynamic>, если существует только один массив, и _InternalLinkedHashMap<String, dynamic>, если их несколько.
Я пробовал много разных подходов, чтобы попытаться решить эту проблему, и просмотрел много разных ответов StackOverflow, но, похоже, ничего не работает. Ошибка просто меняется с каждым моим изменением.
Ниже мой код и моя ошибка.
Ошибка: _TypeError (type '(dynamic) => Null' is not a subtype of type '(String, dynamic) => void' of 'f')
Код:
class VideoComments {
int id;
String comment;
int uid;
int likes;
bool isLikedByUser;
String posterProfilePic;
String posterUsername;
List<Responses> responses;
VideoComments(
{this.id,
this.comment,
this.uid,
this.likes,
this.isLikedByUser,
this.posterProfilePic,
this.posterUsername,
this.responses});
VideoComments.fromJson(Map<String, dynamic> json) {
print("RESP: ${json['responses'].runtimeType}");
id = json['id'];
comment = json['comment'];
uid = json['uid'];
likes = json['likes'];
isLikedByUser = json['isLikedByUser'];
posterProfilePic = json['poster_profile_pic'];
posterUsername = json['poster_username'];
if (json['responses'] != null) {
List<Responses> responses = [];
json['responses'].forEach((v) {
responses.add(new Responses.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['comment'] = this.comment;
data['uid'] = this.uid;
data['likes'] = this.likes;
data['isLikedByUser'] = this.isLikedByUser;
data['poster_profile_pic'] = this.posterProfilePic;
data['poster_username'] = this.posterUsername;
if (this.responses != null) {
data['responses'] = this.responses.map((v) => v.toJson()).toList();
}
return data;
}
}
class Responses {
int id;
String comment;
int uid;
int likes;
bool isLikedByUser;
Responses({this.id, this.comment, this.uid, this.likes, this.isLikedByUser});
Responses.fromJson(Map<String, dynamic> json) {
id = json['id'];
comment = json['comment'];
uid = json['uid'];
likes = json['likes'];
isLikedByUser = json['isLikedByUser'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['comment'] = this.comment;
data['uid'] = this.uid;
data['likes'] = this.likes;
data['isLikedByUser'] = this.isLikedByUser;
return data;
}
}
Любая помощь приветствуется!
Не уверен, пробовали ли вы это — у меня это сработало: flutter. dev / docs / development / data-and-backend / Проблема в том, что вам все равно нужно создать класс самостоятельно, но, по крайней мере, отображение json выполняется правильно (и с нулевой безопасностью). — person James P schedule 23.06.2021
Спасибо, Андрия. Я видел это, я не уверен, что нахожусь на уровне владения Dart / Flutter, чтобы использовать это. Кажется, намного выше моего уровня мастерства — person James P schedule 23.06.2021
когда вы используете онлайн-инструменты для преобразования JSON в Dart, например — dripcoding.com/json-to- dart, затем всегда проверяйте тип данных каждой переменной. Вы получаете сообщение об ошибке, потому что одна из переменных определена как STRING, но фактическое значение — NON String value. Вы можете сделать одно — изменить тип данных всех переменных на динамический. это решит проблему. — person James P schedule 06.07.2021
