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()
派生用途。
我正在实现一个具有多个构造函数的 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()
派生用途。