如何为含可空成员的Dart类添加非空参数构造函数?
解决Dart类添加非空参数构造函数的问题
你之前的写法不被代码分析器认可,核心原因是:required是Dart的关键字,不能用作命名构造函数的名称。
要实现要求传入非空参数的构造函数,有两种实用方案:
方案一:使用合法命名的构造函数
给命名构造函数换一个非关键字的名称,比如Foo.nonNull,同时将参数类型设为非空的int,确保调用时必须传入非空值:
class Foo { int? a; Foo(this.a); // 命名构造函数,强制传入非空int Foo.nonNull(int a) : this.a = a; }
调用示例:
// 必须传入非空int,否则编译报错 var foo = Foo.nonNull(10);
方案二:用required标记必填参数(结合命名参数)
如果想保留"必须传入"的语义,也可以通过命名参数+required修饰的方式实现,同时限制参数为非空类型:
class Foo { int? a; // 主构造函数要求必须传入非空int Foo({required int a}) : this.a = a; // 保留原有的可选参数构造函数 Foo.optional(int? a) : this.a = a; }
调用示例:
// 必须传入命名参数a,且值不能为null var foo = Foo(a: 20);
内容的提问来源于stack exchange,提问作者Tanguy
相关产品推荐
相关产品推荐

