繁体   English   中英

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

[英]Dart(/Flutter): Create function in initializer list

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

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

现在,一个MyWidget.list的构造MyWidget.list将收到一个列表myListmyList创建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关键字并将所有内容移到构造函数的代码块中将是一个解决方案,尽管我只考虑万不得已。


注意:这不是直接的抖动问题,因为它发生在每个功能对象上。

将函数括在括号中似乎可以消除警告。 虽然将其改为说括号是多余的!

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM