Flutter中创建类与对象时报非空类型字段未初始化错误如何解决
问题根源
这个报错是Dart 2.12及以上版本空安全机制的强制校验导致的:
- 非空类型的类字段必须在构造函数体执行前完成初始化,你原有代码在构造函数体内部赋值的时机不符合校验规则
- 构造函数的命名参数
q、a默认是可选可空类型,无法直接赋值给非空的类字段
解决方案
根据你的业务需求可以选择以下任意一种修改方式:
方案1:使用Dart语法糖最简实现(最推荐)
直接在构造参数中用this.绑定对应类字段,省去手动赋值步骤,同时用required标记参数为必传非空:
class Question{ String questionText; bool questionAnswer; Question({required this.questionText, required this.questionAnswer}); }
方案2:用初始化列表完成赋值
如果你需要保留参数名和字段名不一致的写法,可以用初始化列表在构造函数体执行前完成字段赋值:
class Question{ String questionText; bool questionAnswer; Question({required String q, required bool a}) : questionText = q, questionAnswer = a; }
方案3:允许字段为空(不推荐,仅适用字段确实可能为空的场景)
给字段类型后加?标记为可空类型,后续使用字段时需要自行做空安全校验:
class Question{ String? questionText; bool? questionAnswer; Question({String? q, bool? a}){ questionText = q; questionAnswer = a; } }
内容的提问来源于stack exchange,提问作者Artuphay
相关产品推荐
相关产品推荐

