带有命名参数的回调函数中的 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 没有 编译良好的空安全

有没有办法解决:

  1. 不切换到位置参数
  2. 没有制作命名参数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

中找到