Dart 'cost'用法与另一个'const'值

问题描述 投票:0回答:1

我需要创建具有时间范围的课程,并且我想为此使用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
等...

dart constructor
1个回答
0
投票

在这种情况下,您将无法将 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}) {}
}
© www.soinside.com 2019 - 2024. All rights reserved.