Dart(/Flutter):在初始化列表中创建函数

Dart(/Flutter): Create function in initializer list

我正在实现一个具有多个构造函数的 class,它在内部围绕一个 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 中,此代码段产生错误:

The initializer type 'Type' can't be assigned to the field type '(BuildContext, int) → Widget'.

我没有在google上找到任何相关内容,语言文档也没有提供有用的信息。删除 final 关键字并将所有内容移动到构造函数的代码块中将是一种解决方案,尽管我只会考虑最后的手段。


注意:这不是一个直接的抖动问题,因为它会出现在每个函数对象中。

将函数括在括号中似乎可以使警告消失;尽管将其更改为说括号是多余的!

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

注意上下文是如何未被使用的。这意味着您的预构建小部件无法访问它,这意味着它们不能将它用于任何 .of() 派生用途。