Home > OS >  Use enum constructor directly in Dart
Use enum constructor directly in Dart

Time:06-08

Is it possible to use the enum constructor directly?

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

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

  const Test(this.id);
}

This will give the following error:

generative enum constructors can only be used as targets of redirection

I know that it can be solved like this:

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

But it feels like there must be a way to avoid this boiler plate factory?

CodePudding user response:

I don't think there is an easier way than that factory. My personal opinion is also that it really isn't that much of boiler plate, but that's subjective.

One reason I can think of why there isn't an easier method, is because the id in your case is not unique, this is perfectly valid:

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

Now you will never be able to get the secondtest1 using the fromId

  • Related