Дротик (/ Flutter): создать функцию в списке инициализатора - PullRequest
0 голосов
/ 08 февраля 2019

Я реализую класс с несколькими конструкторами, который внутренне построен вокруг IndexedWidgetBuilder (объект функции)

typedef IndexedWidgetBuilder = Widget Function(BuildContext context, int index);

Теперь один из конструкторов, вызывающих его MyWidget.list, получит список myList и создайте из него IndexedWidgetBuilder myBuilder:

IndexedWidgetBuilder myBuilder
  = (BuildContext context, int index) => list[index % list.length];

Пока этот фрагмент кода работает идеально, я не могу использовать его в списке инициализатора конструктора.Минимальный рабочий пример:

class MyApp {
  // Default constructor goes here

  MyApp.list(List<int> myList) :
    myBuilder = (BuildContext context, int index) => list[index % list.length];

  final IndexedWidgetBuilder myBuilder;
}

В Android Studio этот фрагмент кода выдает ошибку:

Тип инициализатора «Тип» не может быть назначен типу поля »(BuildContext, int) → Widget '.

Я не нашел ничего связанного с Google, и документация по языку также не предоставила полезной информации.Удаление ключевого слова final и перемещение всего в блок кода конструктора было бы решением, хотя я бы рассмотрел только последнее средство.


Примечание. Это не является проблемой, связанной с флаттером,так как это происходит с каждой функцией объектов.

1 Ответ

0 голосов
/ 08 февраля 2019

Заключение функции в круглые скобки, похоже, убирает предупреждение;хотя изменится на то, что круглые скобки излишни!

  MyApp.list(List<Widget> list)
      : myBuilder =
            ((_, int index) => list[index % list.length]);

Обратите внимание, что контекст не используется.Это означает, что ваши предварительно созданные виджеты не имеют к нему доступа, а это означает, что они не могут использовать его для любого из .of() производных применений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...