An enum lists fixed values. A switch expression over the enum is checked for exhaustiveness.

Program

Play the program to label a priority with an exhaustive switch.

enums.dart
Replay: real traced execution (multi-file project)
enum Priority { low, medium, high }

void main() {
  var p = Priority.high;
  var label = switch (p) {
    Priority.high => 'urgent',
    Priority.medium => 'normal',
    Priority.low => 'whenever',
  };
  print(label);
}
  1. p ← Priority.high

    3void main() {4  var p = Priority.high;5  var label = switch (p) {
    values this stepPriority.highp
  2. matched arm ← Priority.high

    4var p = Priority.high;5var label = switch (p) {6  Priority.high => 'urgent',
    values this stepPriority.highmatched armPriority.highp
  3. label ← urgent

    5var label = switch (p) {6  Priority.high => 'urgent',7  Priority.medium => 'normal',
    values this stepurgentlabel
  4. print(label);

    9  };10  print(label);11}
    outputurgent
    values this stepurgentlabel
enum `enum Priority { ... }` defines fixed named values.
Priority.high Each value is accessed as `EnumName.value`.
exhaustive Listing every variant lets the compiler skip a `default` arm.