Миграция Dart 2.7 для typedef с параметром типа Null - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь перенести старый код dart 1.25 в 2.7 на windows. Я сталкиваюсь с некоторыми ошибками и не понимаю, как их исправить.

В коде использовались некоторые параметры типа Null в typedef, например:

typedef dynamic PropertyGetter(Null object);

Я не совсем понимаю, почему это было закодировано как это, но это работало на 1.25. Этот typedef использовался, чтобы получить свойство для любого переданного типа объекта, который может быть Null, я полагаю. Я также предполагаю, что параметр типа Null имел свою собственную причину присутствия.

Но теперь, с помощью dart 2.7, при выполнении кода у меня появляются такие ошибки:

type 'XXXType' is not a subtype of type 'Null'

Любые идея, как можно исправить код typedef?

--- Edit 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;
}

console сообщение об ошибке:

Unhandled exception:
type 'int' is not a subtype of type 'Null'

1 Ответ

1 голос
/ 30 января 2020

Вы почти наверняка не хотите использовать Null в качестве типа здесь в качестве параметра типа Null, можете принимать только null в качестве аргумента, который довольно бесполезен.

Если вы хотите определить typedef для функции, которая может принимать любой объект, вы должны использовать dynamic или Object в качестве типа. Однако, если вы используете Object, вам нужно будет знать, к какому типу привести объект, прежде чем вы сможете получить доступ к любым свойствам базового объекта. Я бы порекомендовал использовать dynamic, если вы просто ищете быстрое решение.

...