直接在 Dart 中使用枚举构造函数

spy*_*don 13 enums dart flutter

是否可以直接使用枚举构造函数?

void main() {
  print(Test(1));
}

enum Test {
  test1(1),
  test2(2);
  
  final int id;

  const Test(this.id);
}
Run Code Online (Sandbox Code Playgroud)

这将给出以下错误:

生成枚举构造函数只能用作重定向的目标

我知道可以这样解决:

enum Test {
  test1(1),
  test2(2);

  final int id;

  const Test(this.id);
  
  factory Test.fromId(int id) {
    return values.firstWhere((e) => e.id == id);
  }
}
Run Code Online (Sandbox Code Playgroud)

但感觉总得有办法避开这个锅炉板厂吧?

Ivo*_*ers 24

我认为没有比那个工厂更简单的方法了。我个人的观点是,它确实没有那么多的样板,但这是主观的。

我能想到为什么没有更简单的方法的一个原因是因为id在你的情况下不是唯一的,这是完全有效的:

enum Test {
  test1(1),
  secondtest1(1),
  test2(2);

  final int id;

  const Test(this.id);
  
  factory Test.fromId(int id) {
    return values.firstWhere((e) => e.id == id);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在你将永远无法secondtest1使用fromId