---
title: 🏷️ Enumerados
description: "Os **enumerados** (`enum`) serven para representar unha lista pechada de opcións: os días da semana, os estados dunha tarefa ou os tipos de usuario dunha aplicación. Por exemplo, unha tarefa pode estar `pendente`, `entregada` ou `revisada`. Usar un enum evita…"
url: "https://www.drodicio.com/docs/dart/obxectos-dart/enumerados/"
updated: "2026-09-27"
category: Tema 2. Orientación a obxectos en Dart
---

# 🏷️ Enumerados

Os **enumerados** (`enum`) serven para representar unha lista pechada de opcións: os días da semana, os estados dunha tarefa ou os tipos de usuario dunha aplicación.

Por exemplo, unha tarefa pode estar `pendente`, `entregada` ou `revisada`. Usar un enum evita escribir textos distintos por erro, como `'entregada'` nun sitio e `'entregado'` noutro.

## 🔸 Declarar e usar un enum

```dart
// Só se pode escoller un dos estados declarados.
enum EstadoTarefa { pendente, entregada, revisada }

void main() {
  var estado = EstadoTarefa.pendente;
  print(estado); // EstadoTarefa.pendente

  estado = EstadoTarefa.entregada;
  print(estado); // EstadoTarefa.entregada
}
```

Non creamos valores con `EstadoTarefa()`: escollemos un dos que xa declaramos. En Dart, os enums estenden automaticamente `Enum`.

## 🔹 `index`, `name` e `values`

- **`index`**: posición do valor na declaración, empezando en 0.
- **`name`**: nome do valor como texto, sen o prefixo do enum.
- **`values`**: lista de todos os valores do enum, na orde da declaración.

```dart
enum DiaSemana { luns, martes, mercores, xoves, venres, sabado, domingo }

void main() {
  // Escollemos un valor e consultamos o seu índice e nome.
  var dia = DiaSemana.mercores;

  print(dia.index); // 2
  print(dia.name); // mercores

  for (var dia in DiaSemana.values) {
    print('${dia.index}: ${dia.name}');
  }
}
```

> 📌 Nos identificadores escribimos `mercores` e `sabado`, sen acento. Para amosar «mércores» ou «sábado» na pantalla podemos asociarlles un texto, igual que asociamos unha descrición no exemplo avanzado.
>
>
>
> 📌 Se cambias a orde dos valores, cambian os seus índices. Non uses `index` como un identificador permanente para gardar datos.

## 🔹 Usar enums nun `switch`

```dart
// Só se pode escoller un dos estados declarados.
enum EstadoTarefa { pendente, entregada, revisada }

void mostrarEstado(EstadoTarefa estado) {
  switch (estado) {
    case EstadoTarefa.pendente:
      print('Aínda tes que entregar a tarefa.');
    case EstadoTarefa.entregada:
      print('Diego Rodicio recibiu a tarefa.');
    case EstadoTarefa.revisada:
      print('Xa podes consultar a corrección.');
  }
}

void main() {
  mostrarEstado(EstadoTarefa.entregada);
}
```

En Dart 3, os casos con instrucións rematan sen necesidade de escribir `break`: non se executa o caso seguinte. Aquí cubrimos todos os valores do enum, polo que non necesitamos `default`. Se engadimos outro valor, Dart avisará de que falta tratalo.

## 🔹 Un paso máis: enums con atributos e métodos

Desde Dart 2.17, un enum pode ter atributos, métodos e construtores. Así podemos asociar un texto máis lexible a cada valor.

```dart
enum EstadoTarefa {
  pendente('Pendente de entrega'),
  entregada('Entregada ao profesor'),
  revisada('Revisada por Diego Rodicio');

  // Cada valor leva asociado un texto para mostrar ao usuario.
  final String descricion;

  const EstadoTarefa(this.descricion);

  bool get estaRematada => this == EstadoTarefa.revisada;
}

void main() {
  var estado = EstadoTarefa.revisada;
  print(estado.descricion); // Revisada por Diego Rodicio
  print(estado.estaRematada); // true
}
```

Fíxate nestes detalles:

- Despois da lista de valores poñemos **punto e coma**.
- Os atributos de instancia deben ser **`final`**.
- Os construtores xenerativos deben ser **`const`**.
- `name` segue devolvendo o nome do código (`revisada`); `descricion` devolve o texto que nós asociamos.

> 📱 En Flutter, `MainAxisAlignment.center` é un valor dun enum: escollemos unha das opcións de aliñación que ofrece `MainAxisAlignment`. Non estamos chamando a un método.

## 🧪 Exemplo completo: tarefas do IES San Mamede

Podes copiar e executar este bloque por separado.

> 🔗 [Ver o código en DartPad — https://dartpad.dev/?id=5da39e787dd13456a30367a4b6a78c61](https://dartpad.dev/?id=5da39e787dd13456a30367a4b6a78c61)

[https://dartpad.dev/embed-inline.html?id=5da39e787dd13456a30367a4b6a78c61](https://dartpad.dev/embed-inline.html?id=5da39e787dd13456a30367a4b6a78c61)

> 🔗 [Enumerados na documentación oficial de Dart — https://dart.dev/language/enums](https://dart.dev/language/enums)
