无法将参数类型 'Zone?' 分配给参数类型 'Zone' in flutter
the argument type 'Zone?' can't be assigned to the parameter type 'Zone' in flutter
如何解决flutter中的以下错误?
我创建数据 class 来快速读取 JSON 对象。数据 class 工作正常,但我得到了参数类型 'Zone?' 无法分配给参数类型 'Zone' 的颤动错误...
我能做什么?
我的代码
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;
}
}
这里的问题是您使用的是 null-safety 版本的 flutter,因为我们需要处理空值。
解决方法如下:
当您从 API 服务接收数据时,接收到的值可能为空,这意味着该字段的映射也将 return 为空,并且在您的模型字段中您已经声明了变量,因为它可以' t 为 null,因此解决方案是,如果您知道 API 值始终包含字段而不是 json,您可以添加 null 检查运算符,如
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 可能包含 json["zone"] 参数的 NULL 值,您可以将变量声明为 final Zone? zone;
如何解决flutter中的以下错误?
我创建数据 class 来快速读取 JSON 对象。数据 class 工作正常,但我得到了参数类型 'Zone?' 无法分配给参数类型 'Zone' 的颤动错误... 我能做什么?
我的代码
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;
}
}
这里的问题是您使用的是 null-safety 版本的 flutter,因为我们需要处理空值。
解决方法如下:
当您从 API 服务接收数据时,接收到的值可能为空,这意味着该字段的映射也将 return 为空,并且在您的模型字段中您已经声明了变量,因为它可以' t 为 null,因此解决方案是,如果您知道 API 值始终包含字段而不是 json,您可以添加 null 检查运算符,如
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 可能包含 json["zone"] 参数的 NULL 值,您可以将变量声明为 final Zone? zone;