
[英]Flutter / Dart Error: The argument type 'Null Function(Key)' can't be assigned to the parameter type 'void Function(Object)'
[英]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.