Как решить приведенную ниже ошибку в флаттере?
Я создаю класс Data для чтения объекта JSON в флаттере. класс данных работал нормально, но я получил тип аргумента «Зона?» не может быть назначен типу параметра «Зона» при флаттер-ошибке... Что я могу сделать?
МОЙ код
class DatumDatum {
DatumDatum({
required this.vehicleCc,
required this.zone,
required this.value,
});
final String vehicleCc;
final Zone zone;
final double value;
factory DatumDatum.fromJson(Map<String, dynamic> json) => DatumDatum(
vehicleCc: json["vehicleCC"],
zone: zoneValues.map[json["zone"]], // tis line I got a error
value: json["value"].toDouble(),
);
Map<String, dynamic> toJson() => {
"vehicleCC": vehicleCc,
"zone": zoneValues.reverse[zone],
"value": value,
};
}
enum Zone { ZONE_A, ZONE_B }
final zoneValues = EnumValues({
"Zone A": Zone.ZONE_A,
"Zone B": Zone.ZONE_B
});
class EnumValues<T> {
late Map<String, T> map;
late Map<T, String> reverseMap;
EnumValues(this.map);
Map<T, String> get reverse {
if (reverseMap == null) {
reverseMap = map.map((k, v) => new MapEntry(v, k));
}
return reverseMap;
}
}
Нет, я новичок в флаттере
да работает хорошо спасибо
Здесь проблема в том, что вы используете версию флаттера с нулевой безопасностью, из-за которой нам нужно обрабатывать нулевые значения.
Вот решение:
Поскольку данные, полученные от службы API, полученное значение может быть нулевым, что означает, что сопоставление поля также вернет нуль, а в поле вашей модели вы объявили переменную, поскольку она не может быть нулевой, поэтому решение было бы, если вы знаете, что значение API всегда содержит поле, чем в json, вы можете добавить оператор нулевой проверки, например
factory DatumDatum.fromJson(Map<String, dynamic> json) => DatumDatum(
vehicleCc: json["vehicleCC"],
zone: zoneValues.map[json["zone"]]!, // ! this is null check operator
value: json["value"].toDouble(),
);
или если API может содержать значение NULL для параметра json["zone"] вы можете объявить переменную как final Zone? zone;
спасибо чувак.. работает хорошо
Вы читали Понимание нулевой безопасности?