在Flutter类的构造函数中是否需要添加'required'关键字?
为什么Dart构造函数的可选参数需要添加required?
你定义了如下Quote类:
class Quote { String text; String author; Quote({ this.text, this.author }); }
在VSCode中,这段代码会报错,编译器强制要求在构造函数的this.text和this.author前添加required,修改后的代码如下:
class Quote { String text; String author; Quote({ required this.text, required this.author }); }
下面解释必须添加required的原因:
- Dart的空安全特性要求,非空类型的变量必须被初始化。你的
text和author都是String类型(非可空),意味着它们的值不能为null。 - 原来的构造函数使用了命名可选参数(用大括号
{}包裹的参数),这类参数默认允许调用时不传,不传的话对应变量会被赋值为null,这和String非空的类型要求直接冲突,因此编译器报错。 - 添加
required关键字后,会将这些命名参数标记为必须传入的参数,确保实例化Quote类时一定会给text和author赋值,满足非空类型的初始化要求。 - 如果你希望这些参数是可选的(允许调用时不传),可以把变量类型改为可空的
String?,此时就不需要添加required,但后续代码中需要处理变量可能为null的场景。
内容的提问来源于stack exchange,提问作者Alan Koo
相关产品推荐
相关产品推荐

