繁体   English   中英

无法将参数类型'(On ...)-> Null'分配给参数类型'(Object)-> void`

[英]The argument type '(On…) -> Null' can't be assigned to the parameter type `(Object) -> void`

我今天在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

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

您可以更改您的listen方法,使其采用类型参数,以Stream#listen为例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM