我正在浏览Firebase的Flutter文档,发现这一行,我不知道为什么使用“:”这个符号,我是飞镖新手
Record.fromMap(Map<String, dynamic> map, {this.reference})
: assert(map['name'] != null),
assert(map['votes'] != null),
name = map['name'],
votes = map['votes'];
为什么我不能这样初始化
Record.fromMap(Map<String, dynamic> map, {this.reference}) {
name = map['name'],
votes = map['votes'];
}
链接到代码实验室https://codelabs.developers.google.com/codelabs/flutter-firebase/#4
断言函数有什么作用?
答案 0 :(得分:0)
这叫初始化列表,这是调用构造函数时首先要调用的东西。
来自docs
启动器列表
除了调用超类构造函数外,您还可以初始化 构造函数主体运行之前的实例变量。分离 带有逗号的初始化程序。
// Initializer list sets instance variables before
// the constructor body runs.
Point.fromJson(Map<String, num> json)
: x = json['x'],
y = json['y'] {
print('In Point.fromJson(): ($x, $y)');
}
警告:初始化器的右侧无权访问 对此。
在开发过程中,您可以通过使用 初始化程序列表。
Point.withAssert(this.x, this.y) : assert(x >= 0) {
print('In Point.withAssert(): ($x, $y)');
}
设置最终字段时,启动器列表非常方便。的 以下示例在初始化程序中初始化三个最终字段 清单。单击运行以执行代码。
class Point {
final num x;
final num y;
final num distanceFromOrigin;
Point(x, y)
: x = x,
y = y,
distanceFromOrigin = sqrt(x * x + y * y);
}
重定向构造函数
有时候,构造函数的唯一目的是重定向到另一个 同一类中的构造函数。重定向构造函数的主体是 空,构造函数调用出现在冒号(:)后面。
class Point {
num x, y;
// The main constructor for this class.
Point(this.x, this.y);
// Delegates to the main constructor.
Point.alongXAxis(num x) : this(x, 0);
}