flutter 如何在Dart中设置枚举成员的关联常量值?

nafvub8i  于 2023-10-22  发布在  Flutter
关注(0)|答案(4)|浏览(206)

我唯一能找到的设置枚举值的方法是:Add methods or values to enum in dart
不过,我觉得有点乏味。有更好的办法吗?
C#中,我可以简单地做这样的事情:

enum ErrorCode
{
    None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}
7nbnzgx9

7nbnzgx91#

下面是一个简单的例子

enum ErrorCode {
  None,
  Unknown,
  ConnectionLost,
  OutlierReading,
}

extension ErrorCodeExtention on ErrorCode {
  static final values = {
    ErrorCode.None: 0,
    ErrorCode.Unknown: 1,
    ErrorCode.ConnectionLost: 100,
    ErrorCode.OutlierReading: 200,
  };

  int? get value => values[this];
}
x7yiwoj4

x7yiwoj42#

在Dart中有一个即将到来的特性,称为增强的枚举,它允许枚举声明具有许多从类中已知的特性。举例来说:

enum ErrorCode {
    None(0),
    Unknown(1),
    ConnectionLost(100),
    OutlierReading(200);
  final int value;
  const ErrorCode(this.value);
}

这个特性还没有发布(注意,有几个东西还没有工作),但是可以通过传递--enable-experiment=enhanced-enums来使用工具的适当新版本进行实验。
结果是ErrorCode是一个枚举声明,有四个值ErrorCode.NoneErrorCode.Unknown,等等,我们有ErrorCode.None.value == 0ErrorCode.Unknown.value == 1,等等。当前的bleeding edge在公共前端处理这个示例(因此dartdart2js将处理它),但它还没有被分析器处理。

3z6pesqy

3z6pesqy3#

Dart 2.17开始,你可以像这样用成员声明枚举:

enum ErrorCode {
  None(0),
  Unknown(1),
  ConnectionLost(100),
  OutlierReading(200);

  const ErrorCode(this.code);

  final int code;
}

print(ErrorCode.None.code);
print(ErrorCode.Unknown.code);
print(ErrorCode.ConnectionLost.code);
print(ErrorCode.OutlierReading.code);
ulmd4ohb

ulmd4ohb4#

尝试使用私有命名的const构造函数,使用下划线而不是名称。它的行为类似于枚举,因为它不能从类外部安装。

class ErrorCode {
  final int code;
  const ErrorCode._(this.code);

  static const ErrorCode None = ErrorCode._(0);
  static const ErrorCode Unknown = ErrorCode._(1);
  static const ErrorCode ConnectionLost = ErrorCode._(100);
  static const ErrorCode OutlierReading = ErrorCode._(200);
}

你可以这样使用它:

var a = ErrorCode.ConnectionLost;
print(a.code);

相关问题