Перечисления
Для создания перечисления, также известное как enumerator, в Dart используется ключевое слово enum.
В нём перечисляются весь список элементов через запятую. К сожалению, делается это без возможности задания собственных индексов.
Индекс в любом случае начинается с нуля.
enum Company{
    MICROSOFT,  // 0
    APPLE,      // 1
    GOOGLE      // 2
}После этого, можно обращаться к элементам этого списка.
enum Company{
    MICROSOFT,  // 0
    APPLE,      // 1
    GOOGLE      // 2
}
void main(){
    print(Company.MICROSOFT);           // Company.MICROSFT
    print(Company.MICROSOFT.index);     // 0
}Пример использования
Чаще всего перечисления используются для сравнения с какой-либо переменной.
enum Company{
    MICROSOFT,  // 0
    APPLE,        // 1
    GOOGLE      // 2
}
void main(){
    print( getOwnerName( Company.MICROSOFT ) ); // Bill Gates
    print( getOwnerName( Company.APPLE ) );     // Steve Jobs
    print( getOwnerName( Company.GOOGLE ) );    // Sergey Brin
}
String getOwnerName(Company company){
    switch(company){
        case Company.MICROSOFT: return 'Bill Gates';
        case Company.APPLE:     return 'Steve Jobs';
        case Company.GOOGLE:    return 'Sergey Brin';
    }
}Циклы по enum в dart
Также можно пройтись циклом по значениям перечисления. Для этого надо обратиться к массиву значений списка values.
enum Company{
    MICROSOFT,  // 0
    APPLE,      // 1
    GOOGLE      // 2
}
void main(){
    Company.values.forEach((company){
        print( company.index.toString() + ". " + getOwnerName( company ) );
    });
    // 0. Bill Gates
    // 1. Steve Jobs
    // 2. Sergey Brin
}
String getOwnerName(Company company){
    switch(company){
        case Company.MICROSOFT: return 'Bill Gates';
        case Company.APPLE:     return 'Steve Jobs';
        case Company.GOOGLE:    return 'Sergey Brin';
    }
}