我需要创建具有时间范围的课程,并且我想为此使用Duration。 有实施:
final class Timing {
final Duration lower;
final Duration upper;
const Timing.fromDuration(this.lower, this.upper)
: assert(lower > Duration.zero),
assert(upper > Duration.zero),
assert(lower < upper);
}
在另一个类中,我创建了
static const
类的 Timing
字段。必填项,字段的 cos 值将用作方法的默认参数。
class Communicator {
static constTiming p1 = Timing.fromDuration(
Duration(milliseconds: 0), Duration(milliseconds: 20));
void sendMessage(String message, {Duration timeout = p1.lower});
}
创建
p1
会生成 Evaluation of this constant expression throws an exception. dart(const_eval_throws_exception)
错误。
有办法分组吗?我想避免丑陋的变量,如
p1MaxValueInMillis
等...
在这种情况下,您将无法将 const 与 static 一起使用,因为无法在编译时评估“Timing”,但 Final 可以完成这项工作。您将无法将“Timing”属性作为常量访问以在默认参数中使用,但您可以这样做:
class Communicator {
static const Duration lower = Duration(milliseconds: 0);
static const Duration upper = Duration(milliseconds: 20);
static final Timing p1 = Timing.fromDuration(lower, upper);
void sendMessage(String message, {Duration timeout = lower}) {}
}