Tipos enumerados
Aprende sobre el tipo enum en Dart.
Los tipos enumerados, a menudo llamados enumeraciones o enums, son un tipo especial de clase utilizada para representar un número fijo de valores constantes.
Declarar enums simples
#Para declarar un tipo enumerado simple,
usa la palabra clave enum y
enumera los valores que deseas que se enumeren:
enum Color { red, green, blue }
Declarar enums mejorados
#Dart también permite que las declaraciones de enum declaren clases con campos, métodos y constructores const que están limitados a un número fijo de instancias constantes conocidas.
Para declarar un enum mejorado, sigue una sintaxis similar a la de las clases normales, pero con algunos requisitos adicionales:
- Las variables de instancia deben ser
final, incluidas aquellas añadidas por mixins. - Todos los constructores generativos deben ser constantes.
- Los constructores de tipo factory solo pueden devolver una de las instancias de enum fijas y conocidas.
- Ninguna otra clase puede ser extendida, ya que
Enumse extiende automáticamente. - No puede haber anulaciones (overrides) para
index,hashCodeni el operador de igualdad==. - No se puede declarar un miembro llamado
valuesen un enum, ya que entraría en conflicto con el getter estáticovaluesgenerado automáticamente. - Todas las instancias del enum deben declararse al comienzo de la declaración, y debe haber al menos una instancia declarada.
Los métodos de instancia en un enum mejorado pueden usar this para
hacer referencia al valor de enum actual.
Aquí tienes un ejemplo que declara un enum mejorado con múltiples instancias, variables de instancia, getters y una interfaz 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;
}
Usar enums
#Accede a los valores enumerados como a cualquier otra variable estática:
final favoriteColor = Color.blue;
if (favoriteColor == Color.blue) {
print('Your favorite color is blue!');
}
Cada valor en un enum tiene un getter index,
que devuelve la posición basada en cero del valor en la declaración del enum.
Por ejemplo, el primer valor tiene el índice 0,
y el segundo valor tiene el índice 1.
assert(Color.red.index == 0);
assert(Color.green.index == 1);
assert(Color.blue.index == 2);
Para obtener una lista de todos los valores enumerados,
usa la constante values del enum.
List<Color> colors = Color.values;
assert(colors[2] == Color.blue);
Puedes usar enums en sentencias switch, y obtendrás una advertencia si no manejas todos los valores del 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'
}
Si necesitas acceder al nombre de un valor enumerado,
como 'blue' de Color.blue,
usa la propiedad .name:
print(Color.blue.name); // 'blue'
Puedes acceder a un miembro de un valor de enum al igual que lo harías en un objeto normal:
print(Vehicle.car.carbonFootprint);
A menos que se indique lo contrario, la documentación en este sitio refleja Dart 3.12.2. Página actualizada por última vez el 2026-06-29. Ver fuente oreportar un problema.