我今天在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
答案 0 :(得分:2)
问题是listen
期望参数onData
是一个将任何Dart Object
作为参数的函数。您传递的函数仅以OnRowDoubleClick
为参数,因此强模式会产生错误。
您可以更改listen
方法以使其采用类型参数,请查看Stream#listen
示例。