设置Dart中非恒定的默认值

时间:2018-07-11 08:26:49

标签: dart

如何为非恒定参数设置默认值?

我想到了这个

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();
}

但这没用。

3 个答案:

答案 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();
}