Тип аргумента «Зона?» не может быть назначен типу параметра «Зона» во флаттере

Как решить приведенную ниже ошибку в флаттере?

Я создаю класс 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;
    }
}

Вы читали Понимание нулевой безопасности?

jamesdlin 21.03.2022 05:46

Нет, я новичок в флаттере

Mari Selvan 21.03.2022 05:49

да работает хорошо спасибо

Mari Selvan 22.03.2022 04:11
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
3
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Здесь проблема в том, что вы используете версию флаттера с нулевой безопасностью, из-за которой нам нужно обрабатывать нулевые значения.

Вот решение:

Поскольку данные, полученные от службы 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;

спасибо чувак.. работает хорошо

Mari Selvan 22.03.2022 04:13

Другие вопросы по теме