Alex Rivera | Logout

How can I build an enum with Dart?

Asked 2013-04-06T18:33:06.150
54

The Dart language does not have enums (yet??). What is the proper or idiomatic way to construct an enum, at least until a language feature arrives?

Edit
Report

1 Answer

80

Dart now has support for enums.

The rest of this answer is for Dart <= 1.8. If using > 1.8, use Dart's formal support for enums (explained in another answer).

It's true, the Dart language does not (yet?) have enums. There is an open issue for it.

In the meantime, here is an idiomatic Dart snippet to create your own enum.

class Enum {
  final _value;
  const Enum._internal(this._value);
  toString() => 'Enum.$_value';

  static const FOO = const Enum._internal('FOO');
  static const BAR = const Enum._internal('BAR');
  static const BAZ = const Enum._internal('BAZ');
}

Using const constructors means you can use this enum in a switch. Here's an example:

class Fruits {
  final _value;
  const Fruits._internal(this._value);
  toString() => 'Enum.$_value';

  static const APPLE = const Fruits._internal('APPLE');
  static const PEAR = const Fruits._internal('PEAR');
  static const BANANA = const Fruits._internal('BANANA');
}

void main() {
  var yummy = Fruits.BANANA;

  switch (yummy) {
    case Fruits.APPLE:
      print('an apple a day');
      break;
    case Fruits.PEAR:
      print('genus Pyrus in the family Rosaceae');
      break;
    case Fruits.BANANA:
      print('open from the bottom, it is easier');
      break;
  }
}
answered 2013-04-06T18:33:06.150

Your Answer