0

以下代码在使用 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 的情况下编译时,代码编译得非常好。

编译失败的具有Null Safety 的DartPad

没有 Null Safety 的DartPad编译良好

有没有办法解决它:

  1. 无需切换到位置参数
    AND
  2. 不制作命名参数nullable
4

2 回答 2

2

制作您的命名参数int?。然后它将接受一个 int 或 null:

final void Function({int? namedParam}) callbackWithNamedParam;
于 2021-01-23T22:26:46.283 回答
1

添加Randal的答案。来自Dart 的文档

在此处输入图像描述

所以为了解决我的问题,我不得不添加required到匿名函数

Foo(callbackWithNamedParam: ({required namedParam}) { 
                              ^^^^^^^^
    print('param=$namedParam');
  }).callback();

我的工作代码可以在这个Dartpad中找到

于 2021-01-31T07:55:31.743 回答