• Saltar a la navegación principal
  • Saltar al contenido principal

CARLOSZR.COM

Mi blog personal, CarlosZR

  • Blog
  • Contacto
  • Curso de SwiftUI por CarlosZR

Curso de Flutter / 07/07/2021

Union Class en Dart explicada, Freezed Unions

¿Qué son las Unions en Dart?

Mediante las Unions en Dart podemos verificar subtipos de una forma más sostenible a lo largo de nuestro código. Para ello utilizamos el operador «is». Esto se utiliza en muchas áreas como la gestión de estados. Te lo explico con un ejemplo en el vídeo.

Vídeo con ejemplo y explicación de qué son las Unions en Dart

Antes de aprender las union en Dart es importante que sepas qué es un enum pues podría decirse que los enum son un concepto más básico de las union class, y una buena base para conocer y sobre todo comprender de qué va todo esto y su utilidad (que es enorme!!). Vamos despacio y lo comprenderás todo.

💻👉 Código de los ejemplos: al final de la página.

Los enum son un tipo especial de clase utilizada para representar un número fijo de valores constantes. Por ejemplo, si tenemos un animal, en este ejemplo indicamos que puede ser alguno de estos tres tipos animales:

enum Animal {tigre, leon, foca}

Para crear una instancia de Animal lo hacemos de la siguiente forma:

final miAnimal = Animal.tigre;
Ejemplo simple de enum en Dart
Ejemplo simple de enum en Dart

Podemos decir que con los enum acotamos un cierto número de posibilidades, como por ejemplo un tipo de rol de usuario o un tipo de configuración. Tal vez hayas visto algo parecido a esto en otro lenguaje:

enum User {admin, user}

El problema es que con los enum se nos restringe a guardar información o un estado de dicha información. Con las union podemos instanciar las distintas posibilidades y sus diferentes propiedades y métodos. Vaya, esto se pone interesante. ¿eh?

Nos permiten representar una herencia limitada a las clases que definamos, cerrando la posibilidad que terceros puedan extenderla, así que tenemos un conjunto de subclases o hijos de nuestra clase definida. Ya sabes, memoriza este concepto, clases padre y clases hijo.

Además, con las union podemos restringir la herencia de la interfaz. Sí, restringir. A diferencia de crear una interfaz o clase abstracta, las unions nos permite restringir la herencia de la interfaz, permitiendo que terceros no puedan heredar de la interfaz. Con las union en Dart podemos permitir que terceros no puedan heredar de la clase padre.

Podemos decir que las Freezed Unions son lo contrario de las Freezed Data Classes.

Paquetes que necesitamos instalar

Para poder usarlas, necesitamos añadir varios paquetes a nuestro proyecto. Uno de ellos es build_runner. Este es el encargado de generar código automáticamente. Miremos el contenido de pubspec.yaml del proyecto. Aquí te dejo los enlaces de descarga para los paquetes para usar las freezed unions en dart:

  • freezed.
  • freezed annotation.
  • build runner.
Paquetes necesarios para usar Union en Dart
Paquetes necesarios para usar Union en Dart

Si tienes algún problema al guardar el pubspec.yaml porque no instala los paquetes, ejecuta el siguiente comando en la terminal de Visual Studio, dentro de la carpeta del proyecto, claro:

flutter packages get

Creación de una Freezed Union

Para crear la clase usamos la palabra funion, que nos crea el snippet (te dejo los snippets de funion y ptf más abajo para que los añadas a Visual Studio).

funion para creal el snippet para union en dart
funion crea el snippet

creacion de union en dart con funion
Ejemplo de Union en Dart creado con funion

Para que el código se genere de forma automática, debemos ejecutar el siguiente comando en la terminal. Recuerda haber guardado los cambios antes de ejecutar el comando.

flutter run build_runner watch --delete-conflicting-outputs

Si queremos que ejecutar sólo una vez ponemos build en lugar de watch. No olvidar de incluir el part con la ayuda de ptf. Esto hay que hacerlo antes de ejecutar build_runner, de lo contrario no funciona.

part del union
part de la Union

Ejemplo del Union en Dart ya terminado

Veamos el ejemplo una vez terminado.

Ejemplo del Union en Dart Terminado
Ejemplo del Union en Dart terminado

¿Por qué usarlas?

El operador is es muy poderoso a la hora de comprobar si algo es de un cierto tipo, pero como puedes ver en el vídeo, si añadimos tipos a «algo», después debemos asegurarnos que algo es de ese cierto tipo a lo largo de todo el programa. Si usamos las freezed union no tendremos ese problema. La aplicación se encargará sola de indicarnos que no hemos comprobado ese tipo en tiempo de desarrollo. Lo entenderás rápido si ves el vídeo del inicio de este artículo.

Es una de las grandes ventajas de usarlas.

Código del ejemplo

Aquí te puedes descargar el código del ejemplo.

Snippets que uso para las Union Class

Estos son los snippets que te he indicado antes y te ahorrarán mucho trabajo y tiempo. Recuerda añadirlos al archivo dart.json, que puedes encontrar en :

Preferences: Configure Preference Snippets

Para crear la clase:

"Freezed Union": {
		"prefix": "funion",
		"body": [
		  "@freezed",
		  "class ${1:Union} with _$${1:Union} {",
		  "  const ${1:Union}._();",
		  "  const factory ${1:Union}.${2}(${4}) = ${3};",
		  "}"
		],
		"description": "Freezed Union"
	  },

Para crear el part:

"Part 'Freezed' statement": {
		"prefix": "ptf",
		"body": [
		  "part '${TM_FILENAME_BASE}.freezed.dart';",
		],
		"description": "Creates a filled-in freezed part statement"
	  },

Publicado en: Curso de Flutter

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Carlos ZR

  • Sígueme en Twitter
  • Política de Cookies
  • Política de Privacidad
  • Aviso Legal

Utilizamos cookies para ofrecerte la mejor experiencia en nuestra web.

Puedes aprender más sobre qué cookies utilizamos o desactivarlas en los ajustes.

CARLOSZR.COM
Powered by  GDPR Cookie Compliance
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies estrictamente necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Si desactivas esta cookie no podremos guardar tus preferencias. Esto significa que cada vez que visites esta web tendrás que activar o desactivar las cookies de nuevo.