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

