我正在实现具有多个构造函数的类,该类在内部围绕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'。
我没有在Google上找到任何相关信息,语言文档也未提供有用的信息。删除final
关键字并将所有内容移到构造函数的代码块中将是一种解决方案,尽管我只考虑不得已。
注意:这并不是直接的抖动问题,因为它发生在每个函数对象上。
答案 0 :(得分:3)
将函数括在括号中似乎可以消除警告。虽然更改为说括号是多余的!
MyApp.list(List<Widget> list)
: myBuilder =
((_, int index) => list[index % list.length]);
请注意如何使用上下文。这意味着您的预构建窗口小部件无法访问它,这意味着它们不能用于任何.of()
派生用途。