参数类型"(On....) -> Null"不能分配给参数类型"(对象)-> 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以获取示例。

相关内容

最新更新