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

Flutter:合并列表至自定义Question类时出现错误

解决Dart中Question类的初始化报错问题

嘿,我看你在把问题文本和答案的两个独立列表合并到自定义Question类时踩坑了,咱们来一步步理清问题出在哪,以及怎么修复!

首先还原下你的场景:你原本有两个分开的列表存储内容:

List<String> questionText = [ 'You can lead a cow down stairs but not up stairs.', ];
List<bool> questionAnswer = [ false, ];

你想把这俩合并到自己写的Question类里,但写的类代码出现了报错,你的类代码是这样的:

class Question {
  String questionText;
  bool questionAnswer;
  Question({required String q, required bool a}) {
    questionText = q;
    questionAnswer = a;
  }
}

问题根源

在Dart的null安全模式下,类的非空成员变量(比如你这里的questionText和questionAnswer,都是非可空类型)必须在构造函数体执行之前完成初始化。你现在的写法是在构造函数体里给成员变量赋值,这不符合null安全的规则,所以编译器会报错。

两种修复方案

方案一:使用初始化列表

直接在构造函数的参数后面用初始化列表完成成员变量的赋值,这是符合null安全要求的写法:

class Question {
  String questionText;
  bool questionAnswer;
  // 用初始化列表在构造函数体执行前完成赋值
  Question({required String q, required bool a}) 
      : questionText = q,
        questionAnswer = a;
}

方案二:用Dart简洁构造语法(推荐)

Dart支持直接在构造参数里用this.成员变量的方式,自动完成参数和成员变量的绑定,写法更简洁:

class Question {
  String questionText;
  bool questionAnswer;
  // 直接通过this语法绑定参数与成员变量
  Question({required this.questionText, required this.questionAnswer});
}

合并列表的示例代码

修复完Question类后,你就可以轻松把原来的两个列表合并成Question对象的列表了,这里给你两种常用写法:

写法一:循环遍历
List<Question> questions = [];
for (int i = 0; i < questionText.length; i++) {
  questions.add(Question(
    questionText: questionText[i],
    questionAnswer: questionAnswer[i]
  ));
}
写法二:用List.generate更简洁
List<Question> questions = List.generate(
  questionText.length,
  (index) => Question(
    questionText: questionText[index],
    questionAnswer: questionAnswer[index]
  )
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:48:12