man*_*ano 5 constructor function-object initializer-list dart flutter
我正在实现一个具有多个构造函数的类,它是围绕 IndexedWidgetBuilder(一个函数对象)在内部构建的
typedef IndexedWidgetBuilder = Widget Function(BuildContext context, int index);
Run Code Online (Sandbox Code Playgroud)
现在,调用它的构造函数之一MyWidget.list将接收一个列表myList并从中创建 IndexedWidgetBuilder myBuilder:
IndexedWidgetBuilder myBuilder
= (BuildContext context, int index) => list[index % list.length];
Run Code Online (Sandbox Code Playgroud)
虽然这个代码片段单独工作得很好,但我无法在构造函数的初始化列表中使用它。一个最小的工作示例读取
class MyApp {
// Default constructor goes here
MyApp.list(List<int> myList) :
myBuilder = (BuildContext context, int index) => list[index % list.length];
final IndexedWidgetBuilder myBuilder;
}
Run Code Online (Sandbox Code Playgroud)
在 Android Studio 中,此代码段会产生错误:
初始化器类型“Type”不能分配给字段类型“(BuildContext, int)?小部件'。
我在 google 上没有找到任何相关内容,语言文档也没有提供有用的信息。删除final关键字并将所有内容移动到构造函数的代码块中将是一种解决方案,尽管我只会考虑作为最后的手段。
注意:这不是直接的颤振问题,因为它发生在每个函数对象中。
将函数括在括号中似乎可以使警告消失;尽管将其更改为说括号是多余的!
MyApp.list(List<Widget> list)
: myBuilder =
((_, int index) => list[index % list.length]);
Run Code Online (Sandbox Code Playgroud)
请注意上下文是如何被使用的。这意味着您的预构建小部件无权访问它,这意味着它们不能将其用于任何派生.of()用途。
| 归档时间: |
|
| 查看次数: |
1789 次 |
| 最近记录: |