Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振构造函数参数_Flutter_Dart - Fatal编程技术网

Flutter 颤振构造函数参数

Flutter 颤振构造函数参数,flutter,dart,Flutter,Dart,我在一个示例中看到了以下代码 我无法理解构造函数中的代码。有人能解释一下这里发生了什么吗?这个构造函数有两个位置参数: 第一个是this.duration,它将初始化final int duration字段this.constructor中的something表示它将使用所创建实例的名称something初始化字段。 第二个参数是可选的位置参数,因为它列在方括号中。它是一个不带类型参数的列表,因此此列表可以包含任意对象的混合。如果未设置此列表的值,则使用空列表的默认值(=const[])cons

我在一个示例中看到了以下代码


我无法理解构造函数中的代码。有人能解释一下这里发生了什么吗?

这个构造函数有两个位置参数:
第一个是
this.duration
,它将初始化
final int duration
字段
this.constructor中的something
表示它将使用所创建实例的名称
something
初始化字段。
第二个参数是可选的位置参数,因为它列在方括号中。它是一个不带类型参数的
列表
,因此此列表可以包含任意对象的混合。如果未设置此列表的值,则使用空列表的默认值(
=const[]
)<这里使用code>const关键字,因为根据dart规则,构造函数的默认参数必须是编译时常量

因此调用
TimerState(10)
TimerState(10,[])
将返回相同的结果

下一部分是调用父类的构造函数
equalable
。这个类属于。此类通过删除样板代码来简化重写
运算符==
。它不是在比较中描述每个字段,而是将所有字段的值放在一个列表中并比较此列表。
调用看起来像
:super([duration]…addAll(props))

此处
[duration]
表示创建包含
duration的
列表

.addAll(props)
获取创建的带有持续时间的列表,添加在
TimerState
构造函数中传递的
props
列表中的所有内容,并返回包含持续时间和道具的新列表。这样做只是为了简化
TimerState
对象的相等性比较

因此,通过调用
TimerState(10[prop1,prop2,prop3])
您将创建一个
TimerState
,持续时间设置为10,它将调用
equalable
构造函数,参数为
[10,prop1,prop2,prop3]

我希望我没有让你更加困惑:)

我认为在本例中使用
Equatable
有点过分,因为只有一个实际属性,
TimerState
中的
props
从未被使用过

现在使用spread操作符编写这篇文章可能会更好:

super([duration]..addAll(props))
变成

super([duration,...props])

至少如果我正确理解了语法。如果没有,有人会用合适的尺子打我。:)

谢谢你的解释。一旦我读了你的答案,一切都有意义,除了一件事;…的用法。。这里是接线员。我认为它将用于对同一对象执行多个操作,如list.add(x)…add(y)。这里add(x)返回void,所以。。需要使用。但是在上面的代码中,使用了[duration]…addAll(props)。为什么[duration].addAll(道具)会抛出错误?[duration]是否返回一个列表对象,以便我们可以直接调用addAll方法?@humblePilgrim addAll也返回void,因此需要使用cascade运算符来返回一个列表我也看到了const[]。这和常量[]是一样的吗?
super([duration,...props])