[带Null类型参数的typedef的Dart 2.7移植

问题描述 投票:0回答:1

我正在尝试在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'
dart typedef
1个回答
1
投票

您几乎可以肯定不想在这里使用Null作为类型,将其作为Null类型的参数只能接受null作为参数,这几乎没有用。

如果要为可以接受任何对象的函数定义typedef,则应使用dynamicObject作为类型。但是,如果使用Object,则需要知道将对象强制转换为哪种类型,然后才能访问基础对象的任何属性。如果您只是想快速解决问题,建议您使用dynamic

© www.soinside.com 2019 - 2024. All rights reserved.