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
相关产品推荐
相关产品推荐

