带有命名参数的回调函数中的 Dart Null Safety
Dart Null Safety in a callback function with named params
使用 Null Safety 编译时,以下代码失败并出现以下错误:
参数namedParam
由于其类型不能有null
的值,并且没有提供非空默认值。
void main() {
Foo(callbackWithNamedParam: ({namedParam}) {
print('param=$namedParam');
}).callback();
}
class Foo {
final void Function({required int namedParam}) callbackWithNamedParam;
Foo({required this.callbackWithNamedParam});
void callback() {
callbackWithNamedParam(namedParam: 10);
}
}
在没有 Null Safety 的情况下编译时,代码编译得非常好。
DartPad with Null Safety 编译失败
DartPad 没有 编译良好的空安全
有没有办法解决:
- 不切换到位置参数
和
- 没有制作命名参数
nullable
?
创建你的命名参数int?
。然后它将接受一个 int 或 null:
final void Function({int? namedParam}) callbackWithNamedParam;
添加 s answer. From Dart's documentation
所以为了解决我的问题,我不得不将required
添加到匿名函数
Foo(callbackWithNamedParam: ({required namedParam}) {
^^^^^^^^
print('param=$namedParam');
}).callback();
我的工作代码可以在这个Dartpad
中找到
使用 Null Safety 编译时,以下代码失败并出现以下错误:
参数namedParam
由于其类型不能有null
的值,并且没有提供非空默认值。
void main() {
Foo(callbackWithNamedParam: ({namedParam}) {
print('param=$namedParam');
}).callback();
}
class Foo {
final void Function({required int namedParam}) callbackWithNamedParam;
Foo({required this.callbackWithNamedParam});
void callback() {
callbackWithNamedParam(namedParam: 10);
}
}
在没有 Null Safety 的情况下编译时,代码编译得非常好。
DartPad with Null Safety 编译失败
DartPad 没有 编译良好的空安全
有没有办法解决:
- 不切换到位置参数
和 - 没有制作命名参数
nullable
?
创建你的命名参数int?
。然后它将接受一个 int 或 null:
final void Function({int? namedParam}) callbackWithNamedParam;
添加
所以为了解决我的问题,我不得不将required
添加到匿名函数
Foo(callbackWithNamedParam: ({required namedParam}) {
^^^^^^^^
print('param=$namedParam');
}).callback();
我的工作代码可以在这个Dartpad
中找到