我正在检查一些飞镖代码并查看此代码:
AppState.fromJson(Map<String, dynamic> json)
: cartItems = (json['cartItems'] as List)
.map((i) => new CartItem.fromJson(i as Map<String, dynamic>))
.toList();
冒号背后的原因是什么?
为什么这与常规任务不同?
答案 0 :(得分:1)
您可以在飞镖之旅中找到更多信息:https://dart.dev/guides/language/language-tour#classes
如果超类没有未命名,无参数的构造函数,则必须手动调用超类中的构造函数之一。在冒号(:)之后,构造函数主体(如果有)之前指定超类构造函数。
除了调用超类构造函数外,还可以在构造函数主体运行之前初始化实例变量。用逗号分隔初始化程序。
// 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)');
}
在开发过程中,您可以通过使用初始化列表中的assert来验证输入。
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);
}