参数类型'(On ....) - > Null'不能分配给参数类型`(Object) - > void`
问题描述:
我已经在我的Dart代码库中启用了strict模式,并且已经修复了大部分警告和错误。 这一次我不知道如何解决......参数类型'(On ....) - > Null'不能分配给参数类型`(Object) - > void`
这是我的方法签名:
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
的示例。
我如何定义输入类型为T而不将整个类标记为T类?我的想法是能够在同一个总线实例中拥有多个不同类型的监听器,只要我标记T类的类,那么每个实例只能执行一个类型? Kotlin允许你执行'inline fun String.fromJson():T {}'在这种情况下,我可以调用'fromJson()',我将如何在Dart中执行此操作? –
您可以添加类型注释到你的'listen'功能,例如: 'StreamSubscription听(无效昂达(T事件){功能onError的,无效onDone(),布尔cancelOnError})' 请参阅http: //news.dartlang.org/2016/12/dart-121-generic-method-syntax.html更多详情 –
这非常酷!我知道Dart必须拥有这样一个功能:-D 感谢Harry! –