#flutter #class-eval
#flutter #класс-оценка
Вопрос:
Я хочу преобразовать полученные данные, как показано ниже, но я получил ошибку и выключение эмулятора! Что я могу сделать?
Map<String, dynamic> responseClassMap = {
'$ResponseCompany': ResponseCompany,//ResponseCompany is class
'$ResponseCompanyDetail': ResponseCompanyDetail, //ResponseCompanyDetail is class
};
for (var item in responseClassMap.entries) {
if (className == item.key) {
result = responseData.map((data) => item.value.fromJson(data)).toList();
}
}
Вот класс ResponseCompany.dart
@JsonSerializable()
class ResponseCompany {
final num sales, ...;
...
factory ResponseCompany.fromJson(Map<String, dynamic> json) => _$ResponseCompanyFromJson(json);
...
Вот ResponseCompany.g.dart
ResponseCompany _$ResponseCompanyFromJson(Map<String, dynamic> json) {
return ResponseCompany(
);
...
}
Комментарии:
1. какая ошибка? пожалуйста, вставьте его
Ответ №1:
ИМХО item.value.fromJson
не сработает. Поскольку FromJSON является фабричным конструктором, а в правиле Дарта нельзя вызывать фабричный конструктор для типа, хранящегося в переменной. (Действительно, проблема скрыта, потому что вы создаете a Map<string, dynamic>
и dart, позволяя вызывать все во dynamic
время компиляции.)
Для вашего конкретного случая вы можете сделать
Map<String, dynamic> map = {
'$ResponseCompany': (d)=>ResponseCompany.fromJson(d),//ResponseCompany is class
'$ResponseCompanyDetail': (d)=>ResponseCompanyDetail.fromJson(d), //ResponseCompanyDetail is class
};
for (var item in map.entries) {
if (className == item.key) {
result = responseData.map((data) => item.value(data)).toList();
}
}
Комментарии:
1. Я получил сообщение об ошибке
The getter 'fromJson' isn't defined for the type 'ResponseCompany'. Try importing the library that defines 'fromJson', correcting the name to the name of an existing getter, or defining a getter or field named 'fromJson'
, когда я ввел ваш код…2. @mikezang запустите генератор кода. Я предполагаю, что вы используете библиотеку json для flutter? тогда сначала прочитайте этот документ
3. Извините, что я новичок в flutter, можете ли вы дать мне более подробный совет? Я могу использовать
result = responseData.map((data) => ResponseCompany.fromJson(data)).toList();
в том же файле,ResponseCompany.g.dart
проблем нет.4. @mikezang покажите свой полный код, включая .g.dart
5. Отлично! Большое спасибо!