Добавить методы или значения в перечисление в дротике

В java, когда вы определяете перечисление, вы можете сделать что-то похожее на следующее. Возможно ли это в Дарте?

enum blah {
  one(1), two(2);
  final num value;
  blah(this.value);
}

Ответы

Ответ 1

Переносы Дарта используются только для простейших случаев. Если вам нужны более мощные или более гибкие перечисления, используйте классы со статическими константными полями, как показано на fooobar.com/questions/187494/...

Таким образом вы можете добавить все, что вам нужно.

Ответ 2

Нету. В Dart перечисления могут содержать только перечисленные элементы:

enum Color {
  red,
  green,
  blue
}

Однако каждому элементу в перечислении автоматически присваивается порядковый номер:

print(Color.red.index);    // 0
print(Color.green.index);  // 1

Вы можете получить значения по их индексам:

print(Color.values[0] == Color.red);  // True

См.: https://www.dartlang.org/guides/language/language-tour#enums.

Ответ 3

Это может быть не "Эффективный дротик", я добавляю статический метод в класс Helper (в Dart нет объекта-компаньона).

В вашем файле color.dart

enum Color {
  red,
  green,
  blue
}

class ColorHelper{

  static String getValue(Color color){
    switch(color){
      case Color.red: 
        return "Red";
      case Color.green: 
        return "Green";
      case Color.blue: 
        return "Blue";  
      default:
        return "";
    }
  }

}

Поскольку метод находится в том же файле, что и enum, достаточно одного импорта

import 'package:.../color.dart';

...
String colorValue = ColorHelper.getValue(Color.red);