如何为非恒定参数设置默认值?
我想到了这个
class Todo {
final DateTime createdAt;
final DateTime updatedAt;
Todo({DateTime createdAt, DateTime updatedAt})
: createdAt = createdAt != null ? null : DateTime.now(),
updatedAt = updatedAt != null ? null : DateTime.now();
}
我想知道是否可以做得更短,例如,我尝试过:
class Todo {
final DateTime createdAt;
final DateTime updatedAt;
Todo({DateTime createdAt, DateTime updatedAt})
: createdAt ??= DateTime.now(),
updatedAt ??= DateTime.now();
}
但这没用。
答案 0 :(得分:8)
这是可以使用的较短版本:
class Todo {
final DateTime createdAt;
final DateTime updatedAt;
Todo({DateTime createdAt, DateTime updatedAt})
: createdAt = createdAt ?? DateTime.now(),
updatedAt = updatedAt ?? DateTime.now();
}
您的版本无效,因为
createdAt = createdAt ?? DateTime.now()
第一个createdAt
和第二个this.createdAt
涉及2个不同的变量。
前者隐式为# it depends on the environement
env.js
,后者是参数值。
答案 1 :(得分:0)
如果默认值是常数,那么我们可以编写如下构造函数:
class Todo {
final String name;
final String desc;
Todo({this.name = "", this.desc = ""});
}
答案 2 :(得分:-1)
Dart v2 需要 'required' 关键字来做到这一点。所以你最终会得到:
class Todo {
DateTime createdAt;
DateTime updatedAt;
Todo({required createdAt, required updatedAt})
: this.createdAt = createdAt ?? DateTime.now(),
this.updatedAt = updatedAt ?? DateTime.now();
}