You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:12:35