参数类型'(On ....) - >空'不能分配给参数类型`(Object) - > void`

时间:2017-05-24 16:52:30

标签: dart

我今天在Dart代码库中启用了严格模式,并修复了大部分警告和错误。 这个我不确定如何解决......

这是我的方法签名:

StreamSubscription listen(Type eventType, void onData(Object event), { Function onError, void onDone(), bool cancelOnError}) {

   ... code here ...

}

执行时:_bus.listen(OnRowDoubleClick, (OnRowDoubleClick event){ 我得到了

The argument type '(OnRowDoubleClick) -> Null' can't be assigned to the parameter type `(Object) -> void`

我可以将方法签名更改为

StreamSubscription listen(Type eventType, Null onData(Object event), {...`, 

(由于我实际上并不想返回任何内容,因此没有意义),错误更改为

The argument type '(OnRowDoubleClick) -> Null' can't be assigned to the parameter type `(Object) -> Null`

将方法调用更改为:

_bus.listen(OnRowDoubleClick, (event){

错误消失了,但现在我必须一直施展event as OnRowDoubleClick

有更好的办法吗?

*解决方案*

解决方案是用T:

标记监听器
StreamSubscription listen<T>(Type eventType, Null onData(T event), {

现在您可以致电_bus.listen<OnRowDoubleClick>(OnRowDoubleClick, (event){,该活动的类型为OnRowDoubleClick

1 个答案:

答案 0 :(得分:2)

问题是listen期望参数onData是一个将任何Dart Object作为参数的函数。您传递的函数仅以OnRowDoubleClick为参数,因此强模式会产生错误。

您可以更改listen方法以使其采用类型参数,请查看Stream#listen示例。