Flutter(VS Code)中自定义类构造函数非空初始化报错如何解决?
问题原因
Dart 2.12及以上版本默认开启空安全机制,要求非可空类型的变量必须完成初始化,不允许存在未赋值的非空变量。
你贴出的自定义类代码中写的是位置参数构造函数,但实际运行时报错指向的代码是命名参数构造函数Quotes({this.text, this.author});。Dart中命名参数默认是可选参数,空安全规则下,非可空类型的可选命名参数要么标记为必填,要么设置默认值,要么将对应属性改为可空类型,否则就会触发你遇到的报错。
解决方法
根据你当前调用类时使用位置参数的写法,最适配的修改方案如下:
直接简化自定义类的构造函数写法,Dart支持构造参数直接赋值给类属性,无需在函数体内手动赋值,修改后代码如下:
class Quotes { String text; String author; Quotes(this.text, this.author); }
修改后无需调整main.dart中调用Quotes类的代码,直接运行即可解决报错。
如果你后续想使用命名参数的写法,可以参考如下修改方案:
- 自定义类构造函数添加
required标记必填参数
class Quotes { String text; String author; Quotes({required this.text, required this.author}); }
- 同步修改main.dart中调用Quotes类的代码,补充参数名:
List<Quotes> quotes = [ Quotes( text: "Be yoursefl cause everyone else is taken", author: "Oscar Wilde" ), Quotes( text: "I have nothing to declare except my genius", author: "Einstien" ), Quotes( text: "The truth is rarely pure and never simple", author: "Priyanka" ), Quotes( text: "Trust those who are still in the search of truth and not those who has already found one", author: "Hey" ) ];
内容的提问来源于stack exchange,提问作者PRIYANKA CHETTRI
相关产品推荐
相关产品推荐

