Dart 带有可选参数的可选回调

Dart 带有可选参数的可选回调,dart,Dart,我可能在语法上或实际上做了一些错误的事情,所以“不要那样做”可能是正确的,但这似乎应该有效: 类的东西{ //静态动态noop=(){};//失败 静态动态noop=([dynamic value]){};//适用于空情况 动态回调; 事情.u([动态回调([动态值]])) :this.\u callback=callback!=null?callback:Thing.noop; 工厂事物([动态回调([动态值]])){ 返回新事物。u(回调); } } 当我运行这些测试时,第一个测试失败,

我可能在语法上或实际上做了一些错误的事情,所以“不要那样做”可能是正确的,但这似乎应该有效:

类的东西{
//静态动态noop=(){};//失败
静态动态noop=([dynamic value]){};//适用于空情况
动态回调;
事情.u([动态回调([动态值]]))
:this.\u callback=callback!=null?callback:Thing.noop;
工厂事物([动态回调([动态值]])){
返回新事物。u(回调);
}
}

当我运行这些测试时,第一个测试失败,但第二个、第三个和第四个测试通过:

//捕获的类型“()=>dynamic”不是“回调”的类型“([dynamic])=>dynamic”的子类型。
test('带有可选参数的回调',(){
var thing=新事物((){});
thing.doCallback();
thing.doCallback(“数据”);
});
test('带有可选参数的回调',(){
var thing=新事物(([[u]{});
thing.doCallback();
thing.doCallback(“数据”);
});
test('带有可选参数的回调',(){
var thing=新事物();
thing.doCallback();
thing.doCallback(“数据”);
});
test('带有可选参数的回调',(){
var thing=新事物(空);
thing.doCallback();
thing.doCallback(“数据”);
});

动态回调([dynamic value])
表示可以接受一个参数或不接受任何参数的
回调。在第一个测试用例中,您提供的回调(
(){}
)只处理没有参数的调用。所以它不尊重合同。这就是为什么会出现这个错误。

是的,我太专注于试图避免破坏更改:p只是为了跟进,我认为有效的方法是将东西的签名更改为([dynamic callback(),dynamic onData(dynamic value)])因此,现有消费者仍然可以像往常一样注册回调,但新消费者也可以选择使用数据通知。