Flutter 构造函数参数

标签 flutter dart

我在 Flutter tutorial 中看到了以下代码。

@immutable
abstract class TimerState extends Equatable {
  final int duration;

  TimerState(this.duration, [List props = const []])
      : super([duration]..addAll(props));
}

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

最佳答案

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

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

下一部分是调用父类Equatable的构造函数。该类属于equatable package 。此类旨在通过删除样板代码来简化重写operator ==。它不是在比较中描述每个字段,而是将所有字段的值放入一个列表并比较该列表。
调用看起来像 : super([duration]..addAll(props)).
这里[duration]表示创建包含durationList
..addAll(props) 获取创建的包含持续时间的列表,添加在 TimerState 构造函数中传递的 props 列表中的所有内容,并返回这个包含持续时间的新列表以及里面的 Prop 。这样做只是为了简化 TimerState 对象的相等性比较。

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

我希望我没有让你更加困惑:)
我认为在这个例子中使用 Equatable 有点矫枉过正,因为只有一个实际属性,而 TimerState 中的 props 从未被使用过

关于Flutter 构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57472083/

相关文章:

flutter - 在 Visual Studio Code 中执行 com.android.build.gradle.internal.tasks.Workers$ActionFacade Flutter 时出错

android - 编程新手 - 在指定位置找不到 Flutter SDK

flutter - 有问题的特定RenderFlex是: RenderFlex#1c11f OVERFLOWING

flutter - Flutter-建立游戏的良好基础吗?

flutter - Dart Set<E> 如何比较项目?

flutter - 如何在flutter中将小部件屏幕截图存储为jpg文件?

dart - 如何在 flutter 中使用 url 编码的主体发出 HTTP POST 请求?

multithreading - 为什么在这段代码中,await 不会阻塞 ui

flutter - 我将如何在Flutter中制作宾果卡?

dart - DART HTTP Server中带有SSL证书的HTTPS