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

6

我正在实现一个带有多个构造函数的类,它在内部基于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中,这个片段会产生错误:
“初始化程序类型'Type'无法分配给字段类型'(BuildContext,int)→ Widget'。”
我在谷歌上没有找到相关的内容,语言文档也没有提供有用的信息。虽然将所有内容移入构造函数的代码块并删除final关键字是一种解决方案,但这只是最后的选择。
注意:这不是直接与Flutter问题有关,因为它会出现在每个函数对象中。
1个回答

6
将函数放在括号中似乎可以使警告消失,尽管会将警告改为括号是多余的!
  MyApp.list(List<Widget> list)
      : myBuilder =
            ((_, int index) => list[index % list.length]);

请注意上下文未被使用。这意味着您预先构建的小部件无法访问它,因此它们无法将其用于任何派生自.of()的用途。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接