Dart(/Flutter):在初始值设定项列表中创建函数



我正在实现一个具有多个构造函数的类,该类在内部围绕IndexedWidgetBuilder(一个函数对象)构建

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

现在,其中一个名为MyWidget.list的构造函数将接收一个列表myList,并从中创建IndexedWidgetBuildermyBuilder

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工作室中,这个片段会产生错误:

初始值设定项类型"type"无法分配给字段类型"(BuildContext,int)→Widget’。

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


注意:这不是直接的颤振问题,因为它发生在每个函数对象中。

将函数括在括号中似乎会使警告消失;不过把它改成说括号是多余的!

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

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

最新更新