我今天在我的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
以获取示例。