Tipos enumerados
Aprenda sobre o tipo enum em Dart.
Tipos enumerados, frequentemente chamados de enumerações ou enums, são um tipo especial de classe usado para representar um número fixo de valores constantes.
Declarando enums simples
#
Para declarar um tipo enumerado simples,
use a keyword enum e
liste os valores que você deseja enumerar:
enum Color { red, green, blue }
Declarando enums aprimorados
#
Dart também permite que declarações de enum declarem classes
com campos, métodos e construtores const
que são limitados a um número fixo de instâncias constantes conhecidas.
Para declarar um enum aprimorado, siga uma sintaxe semelhante à das classes normais, mas com alguns requisitos extras:
-
Variáveis de instância devem ser
final, incluindo as adicionadas por mixins. -
Todos os construtores generativos devem ser
const. - Construtores factory só podem retornar uma das instâncias fixas e conhecidas do enum.
-
Nenhuma outra classe pode ser estendida, pois
Enumé estendida automaticamente. -
Não pode haver sobrescritas de
index,hashCodeou do operador de igualdade==. -
Um membro chamado
valuesnão pode ser declarado em um enum, pois entraria em conflito com o getter estáticovaluesgerado automaticamente. - Todas as instâncias do enum devem ser declaradas no início da declaração, e deve haver pelo menos uma instância declarada.
Métodos de instância em um enum aprimorado podem usar this para
referenciar o valor atual do enum.
Aqui está um exemplo que declara um enum aprimorado com múltiplas instâncias, variáveis de instância, getters e uma interface implementada:
enum Vehicle implements Comparable<Vehicle> {
car(tires: 4, passengers: 5, carbonPerKilometer: 400),
bus(tires: 6, passengers: 50, carbonPerKilometer: 800),
bicycle(tires: 2, passengers: 1, carbonPerKilometer: 0);
const Vehicle({
required this.tires,
required this.passengers,
required this.carbonPerKilometer,
});
final int tires;
final int passengers;
final int carbonPerKilometer;
int get carbonFootprint => (carbonPerKilometer / passengers).round();
bool get isTwoWheeled => this == Vehicle.bicycle;
@override
int compareTo(Vehicle other) => carbonFootprint - other.carbonFootprint;
}
Usando enums
#Acesse os valores enumerados como qualquer outra variável estática:
final favoriteColor = Color.blue;
if (favoriteColor == Color.blue) {
print('Your favorite color is blue!');
}
Cada valor em um enum tem um getter index,
que retorna a posição, começando em zero, do valor na declaração do enum.
Por exemplo, o primeiro valor tem índice 0,
e o segundo valor tem índice 1.
assert(Color.red.index == 0);
assert(Color.green.index == 1);
assert(Color.blue.index == 2);
Para obter uma lista com todos os valores enumerados,
use a constante values do enum.
List<Color> colors = Color.values;
assert(colors[2] == Color.blue);
Você pode usar enums em instruções switch, e receberá um aviso se não tratar todos os valores do enum:
var aColor = Color.blue;
switch (aColor) {
case Color.red:
print('Red as roses!');
case Color.green:
print('Green as grass!');
default: // Without this, you see a WARNING.
print(aColor); // 'Color.blue'
}
Se você precisar acessar o nome de um valor enumerado,
como 'blue' a partir de Color.blue,
use a propriedade .name:
print(Color.blue.name); // 'blue'
Você pode acessar um membro de um valor enum da mesma forma que faria com um objeto normal:
print(Vehicle.car.carbonFootprint);
Salvo indicação em contrário, a documentação neste site reflete Dart 3.13.7. Página atualizada pela última vez em 2026-11-12. Ver código-fonte ou relatar um problema.
Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.