使用@unfreezed创建可变Quiz类时遇const构造器与非final字段冲突错误如何解决?
问题解决:@unfreezed 与 const 构造器冲突导致的字段非final错误
你用@unfreezed创建可变Quiz类并支持JSON序列化时,遇到错误:Context: Field isn't final, but constructor is 'const'。
原代码如下:
@unfreezed class Quiz with _$Quiz { const factory Quiz({ @JsonKey(name: 'title') @Default(null) String? title, @JsonKey(name: 'categories') @Default(null) String? categories, @JsonKey(name: 'questions') @Default([]) List<Question> questions, }) = _Quiz; factory Quiz.fromJson(Map<String, dynamic> json) => _$QuizFromJson(json); }
错误原因
@unfreezed的作用就是生成非final字段的可变类,但你给factory加了const修饰符——Dart的const构造器要求所有字段必须是final,这就导致了冲突。
解决方法
直接去掉factory前面的const关键字即可,因为@unfreezed生成的可变类不需要const构造器。修改后的代码:
@unfreezed class Quiz with _$Quiz { factory Quiz({ @JsonKey(name: 'title') @Default(null) String? title, @JsonKey(name: 'categories') @Default(null) String? categories, @JsonKey(name: 'questions') @Default([]) List<Question> questions, }) = _Quiz; factory Quiz.fromJson(Map<String, dynamic> json) => _$QuizFromJson(json); }
内容的提问来源于stack exchange,提问作者Kiều Phong
相关产品推荐
相关产品推荐

