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
,但仅在启用断言的情况下进行开发。
我有这个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
,但仅在启用断言的情况下进行开发。