【发布时间】:2021-09-22 16:09:39
【问题描述】:
我正在将我的颤振项目升级为空安全支持。在这个项目中,我有抽象模型类和继承。他们看起来像这样:
abstract class Technology {
Guid id;
String name;
String description;
String assetName;
Technology();
factory Technology.fromJson(Map<String, dynamic> json) =>
TechnologyConverter().fromJson(json);
Map<String, dynamic> toJson() => TechnologyConverter().toJson(this);
}
abstract class Research extends Technology {
ResearchType researchType;
Research();
factory Research.fromJson(Map<String, dynamic> json) =>
ResearchConverter().fromJson(json);
}
class LevelableResearch extends Research {
LevelableResearch();
factory LevelableResearch.fromJson(Map<String, dynamic> json) =>
_$LevelableResearchFromJson(json);
Map<String, dynamic> toJson() => _$LevelableResearchToJson(this);
}
build_runner 生成 json 序列化程序没有问题。 现在,当我更新为 null 安全时,我收到了很多错误,从 " 必须初始化不可为 null 的实例字段 'id'。尝试添加初始化表达式,或在此构造函数中添加字段初始化,或标记它'迟到'"
如果我在构造函数中初始化字段,我必须使用继承类中所有需要的字段调用 ": super()",这会导致编写过多。 正如错误所说,我可以用 late 标记它,但我不确定这是否应该这样做。
编写这些类的正确方法是什么,以便 build_runner 可以生成正确的 json 序列化器?
【问题讨论】:
标签: json flutter dart jsonserializer dart-null-safety