如何使用空安全构建空工厂构造函数?

cre*_*not 5 dart flutter dart-null-safety

用于创建静态方法持有者类的空安全之前的常见 Dart 模式如下:

class MyMethodScope {
  /// Prevents instantiation of this class.
  factory MyMethodScope._() => null;

  static void noop() {}
}
Run Code Online (Sandbox Code Playgroud)

这对于空安全是不可能的,因为工厂构造函数的返回类型显然不可为空。

jam*_*lin 5

基于https://github.com/dart-lang/language/issues/604,看起来工厂构造函数不能再返回 null,所以你不能这样做。

factory或者,您可以只使用返回非空对象的私有构造函数(无论是否)。这仍然会阻止该类在库之外实例化。(当然,它不会阻止类在库中实例化,但您可以避免这样做,因为您控制自己的库。如果您仍然担心意外实例化,则可以将类移动到单独的库中.)

或者只是将类声明为abstract,这是防止类被实例化的正常且直接的方法。

此外,Effective Dart 表示要避免此类课程。