具有必需参数和空安全性的命名构造函数



以下代码不使用健全的null安全性进行编译,因为可以将null传递给初始化不可为null字段的构造函数myString

class MyClass {
String myString;
MyClass({@required this.myString});
}

我希望在this.myString之后添加一个问号可以解决问题,但它没有解决,并且显示了另一个编译错误。

默认值对我来说是没有选择的,似乎唯一的其他解决方案是这样的:

class MyClass {
late String myString;
MyClass({@required myString}) {
this.myString = myString;
}
}

如果有很多参数,这会降低可读性。有没有更方便的解决方案支持用进行初始化在命名构造函数中?

对于不可为null的类型,请使用required或提供默认值。您也可以使用late,但在使用它之前,请确保稍后提供一个值。这就像一个bang运算符。

示例:

class Foo {
// All are non-nullable.
final int a;
final int b;
late final int c; // I trust you that you'll provide me a value later. 

Foo({
required this.a, // <-- Mark it required  
this.b = 0, // <-- or provide a default value. 
});
}

如果我没有误解这个想法,如果你想从构造函数中获得一个可以为null的String param,你可以声明一个"String?"类型

class MyClass {
String? myString;
MyClass({required this.myString});
}

最新更新