dart里面有没有NotNull注解?

Is there any NotNull annotation in dart?

我有这个class:

class WidgetToImage extends StatefulWidget {
  final Function(GlobalKey key)  builder;

  const WidgetToImage({Key? key, @required this.builder}) : super(key: key);

  @override
  _WidgetToImageState createState() => _WidgetToImageState();
}

这段代码无法编译,因为任何人在构造 WidgetToImage 小部件时都可以为 builder 参数传递空值。我知道我可以使构建器可为空,但这不是我想要的,因为稍后我必须检查它是否为空等,从语义上讲它没有任何意义。必须始终传递有效的构建器。

有什么方法可以在 dart 中对此进行注释以避免将构建器 属性 转换为可空类型吗?

如果您使用 Dart 2.12 版,您将获得 null 安全作为一项语言功能。 您似乎已经在使用它,因为您的代码包含 Key?,这是编写“可空”的空安全方式。 另一方面,您的 this.builder 参数应该标记为 required (空安全代码中的关键字)而不是旧的 @required 注释,因此它看起来不像 有效 空安全代码。

代码应为:

class WidgetToImage extends StatefulWidget {
  final Function(GlobalKey key)  builder;

  const WidgetToImage({Key? key, required this.builder}) : super(key: key);

  @override
  _WidgetToImageState createState() => _WidgetToImageState();
}

然后空安全代码将 null 作为参数传递给 builder 是一个编译时错误。 (较旧的非空安全代码仍然可以通过传递 null,但他们是在自找麻烦。)

您可以添加一个断言:

  const WidgetToImage({Key? key, required this.builder}) 
      : assert(builder as dynamic != null), 
        super(key: key);

这将告诉开发你的库的人不要从非 null-sound 代码中传入 null,但仅在启用断言的情况下进行开发。