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

Dart Quiz App中Question类报错:原因分析与解决方法

错误原因
  • 非空字段未初始化:Dart启用空安全后,String、bool这类类型默认是非空的,类中的questionText和questionAnswer字段既没有在声明时赋值,也没有在构造函数初始化阶段完成赋值,违反了空安全对非空字段的初始化要求。
  • 可选参数默认值冲突:构造函数的命名参数q和a是非空类型,但可选参数的隐式默认值是null,调用构造函数时如果不传入这两个参数,会出现null赋值给非空类型的矛盾。
解决方法

针对Quiz App的场景,问题文本和答案属于必填项,可通过以下方式修正代码:

简洁写法(推荐)

class Question {
  String questionText;
  bool questionAnswer;

  // 用required标记必填命名参数,同时直接通过this.初始化字段
  Question({required this.questionText, required this.questionAnswer});
}

传统初始化列表写法

class Question {
  String questionText;
  bool questionAnswer;

  // 给命名参数添加required,确保调用时必须传入
  Question({required String q, required bool a}) 
      // 通过初始化列表完成字段赋值,避免构造函数体内赋值的问题
      : questionText = q,
        questionAnswer = a;
}

修改说明

  1. 给构造函数的命名参数添加required关键字,强制调用者必须传入这两个参数,消除参数默认null的冲突。
  2. 用this.字段名或者初始化列表的方式,在实例创建时直接完成非空字段的赋值,满足空安全对字段初始化的要求。

内容的提问来源于stack exchange,提问作者Lovish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:35:23