dart - 调用构造函数 super 错误,传递了 3 个,预期为 0 个

标签 dart flutter

背景:我正在尝试继承 AnimatedCrossFade 以应用此补丁 https://github.com/flutter/flutter/issues/10243作为一个子类(而不是 fork flutter )。我只是在学习 dart/flutter,老实说,我认为创建从加载小部件到网络图像的淡入淡出本来是一件非常简单的事情,首先要尝试(这并不容易,FadeInImage 不会淡入淡出,也不会使用小部件 [尽管 flutter 中几乎所有东西的设计目标都是小部件],Image.network 没有 onDownloadCompleted 回调,并且 AnimatedCrossFade 有上述居中错误)。无论如何...

这是我调用的代码:

class FixedCrossFade extends AnimatedCrossFade {
  const FixedCrossFade({
    Key key,
    @required firstChild,
    @required secondChild,
    firstCurve: Curves.linear,
    secondCurve: Curves.linear,
    sizeCurve: Curves.linear,
    alignment: Alignment.topCenter,
    @required crossFadeState,
    @required duration,
    layoutBuilder: AnimatedCrossFade.defaultLayoutBuilder,
  }) : super(
    key,
    firstChild,
    secondChild,
    firstCurve: firstCurve,
    secondCurve: secondCurve,
    alignment: alignment,
    crossFadeState: crossFadeState,
    duration: duration,
    layoutBuilder: layoutBuilder
    );
}

作为引用,这是 AnimatedCrossFade 的构造函数:

const AnimatedCrossFade({
  Key key,
  @required this.firstChild,
  @required this.secondChild,
  this.firstCurve: Curves.linear,
  this.secondCurve: Curves.linear,
  this.sizeCurve: Curves.linear,
  this.alignment: Alignment.topCenter,
  @required this.crossFadeState,
  @required this.duration,
  this.layoutBuilder: defaultLayoutBuilder,
}) : assert(firstChild != null),
    assert(secondChild != null),
    assert(firstCurve != null),
    assert(secondCurve != null),
    assert(sizeCurve != null),
    assert(alignment != null),
    assert(crossFadeState != null),
    assert(duration != null),
    assert(layoutBuilder != null),
    super(key: key);

我的 FixedCrossFade 类错误:

error: line 33 pos 8: invalid arguments passed to super class constructor 'AnimatedCrossFade.': 3 passed, 0 expected

第 33 行对应于行 }) : super(

我实际上并没有改变构造函数,我相信我需要做的就是覆盖 createState,并完全重新实现状态对象。来自 python/C++ 背景,我很惊讶扩展 AnimatedCrossFade 没有任何更改会导致错误:

class FixedCrossFade extends AnimatedCrossFade {}
...

No constructor 'FixedCrossFade' declared in class 'FixedCrossFade'

我对 dart 和 flutter 非常陌生,所以这可能是一个非常简单的错误。感谢您的帮助!

最佳答案

正如您所注意到的, super 构造函数只有命名参数,但是您传递的 keyfirstChildsecondChild 没有名称,所以它们是位置参数。将它们更改为:

}) : super(
    key : key,
    firstChild: firstChild,
    secondChild: secondChild,
    firstCurve: firstCurve,

super 调用将起作用。

您需要添加一个构造函数,因为构造函数不是继承的。它们不是实例方法,它们更像是也不是继承的静态方法。所以,对于你的类有任何构造函数,它需要声明它,然后调用一个合适的生成超构造函数来创建父类(super class)。诚然,当你所做的只是提出论点时,这很烦人。

关于dart - 调用构造函数 super 错误,传递了 3 个,预期为 0 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49723153/

相关文章:

dart - 从 Flutter 的抽屉导航中删除应用栏标题?

flutter - 将 ListTiles 排成一行

interface - 如何使用工厂构造函数扩展抽象类?

flutter - Flutter 中 GetX 不使用 "Get.to()"进行绑定(bind)

flutter - 从 DateTime 类中获取意外日期

android - Flutter:共享存储(存储访问框架 API)隐藏子目录中文件的权限不起作用

android - 在 flutter 中改变库比蒂诺滚动条的颜色

firebase - 如何在flutter中从Firebase数据库检索数据?

flutter - 如何确保我的 CustomPaint 小部件绘画存储在光栅缓存中?

dart - 如何减慢game_loop包中的游戏循环