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

Flutter中如何通过类与构造函数合并三个列表?

解决Flutter中Question类构造函数的错误

你的构造函数报错是因为Dart的空安全规则:命名参数q、i、a既没有标记为required,也没有提供默认值,但对应的类成员都是非空类型(late String、late bool本质还是要求最终有非空值),编译器无法确保这些参数会被传入,所以抛出错误。

下面是几种可行的修正方案:

方案1:强制传入所有参数(推荐)

适合你的场景——每个问题必然包含文本、图片和答案,用required标记命名参数,同时可以用更简洁的初始化列表写法:

class Question {
  String questionText; 
  String questionImage; 
  bool questionAnswer; 

  // 用this直接初始化成员变量,省略构造函数体
  Question({required this.questionText, required this.questionImage, required this.questionAnswer}); 
}

如果想保留原来的参数名(q、i、a),也可以这么写:

class Question {
  late String questionText; 
  late String questionImage; 
  late bool questionAnswer; 

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

方案2:允许参数为空

如果某些问题可能缺少部分内容,可以将成员变量设为可空类型,参数默认值设为null:

class Question {
  String? questionText; 
  String? questionImage; 
  bool? questionAnswer; 

  Question({String? q, String? i, bool? a}) { 
    questionText = q; 
    questionImage = i; 
    questionAnswer = a; 
  } 
}

或者简化为:

class Question {
  String? questionText; 
  String? questionImage; 
  bool? questionAnswer; 

  Question({this.questionText, this.questionImage, this.questionAnswer}); 
}

修正后,你就可以遍历原来的三个列表,创建Question实例并组成新列表了,比如:

List<String> texts = ["问题1", "问题2", "问题3"];
List<String> images = ["image1.png", "image2.png", "image3.png"];
List<bool> answers = [true, false, true];

List<Question> questions = [];
for (int i = 0; i < texts.length; i++) {
  questions.add(Question(
    questionText: texts[i],
    questionImage: images[i],
    questionAnswer: answers[i],
  ));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:03:11