我正在尝试在Windows上将一些旧的dart 1.25代码迁移到2.7。我遇到一些错误,我不知道如何解决这些问题。
代码在像这样的typedef中使用了一些Null类型参数:
typedef dynamic PropertyGetter(Null object);
我不知道为什么这样编码,但它在1.25上有效。该typedef用于获取任何传递的对象类型的属性,我想可能是Null。我还认为Null类型参数有其自己的原因。
但是现在,在dart 2.7中,执行代码时出现了这样的错误:
type 'XXXType' is not a subtype of type 'Null'
知道如何固定typedef代码吗?
-编辑1 ---
这里是一个测试该问题的测试用例:
typedef int PropertyGetter(Null object);
void main() {
testTypedef(test1, 2);
testTypedef(test2, 'foo');
}
void testTypedef(PropertyGetter pg, param){
pg(param);
}
int test1(int val) {
print('val:$val');
return val;
}
int test2(String val) {
print('val:$val');
return 0;
}
控制台错误消息:
Unhandled exception:
type 'int' is not a subtype of type 'Null'
您几乎可以肯定不想在这里使用Null
作为类型,将其作为Null
类型的参数只能接受null
作为参数,这几乎没有用。
如果要为可以接受任何对象的函数定义typedef,则应使用dynamic
或Object
作为类型。但是,如果使用Object
,则需要知道将对象强制转换为哪种类型,然后才能访问基础对象的任何属性。如果您只是想快速解决问题,建议您使用dynamic
。