Data Classes en Dart ¿Cuál es su objetivo? ¿Qué función tiene?
Pues la función de las data classes en Dart es la misma que en Kotlin. Son clases dedicadas a la transferencia de datos. Lo que importa es las propiedades que tiene (los datos), no sus funciones. Grábate esto en la cabeza: en las data classes si dos objetos tienen las mismas propiedades con los mismos valores, entonces son iguales. Y, sí, son iguales porque tienen el mismo hashcode.
En una data class lo que importa y lo que contiene son los atributos que queremos guardar.
A muchos les puede sorprender que en un lenguaje nuevo como es Dart no se hayan implementado de forma nativa. En Kotlin, para crear una data class simplemente añadimos la palabra reservada data antes de class.
data class Coche(
///
)
Pues nosotros nos lo vamos a tener que trabajar un poco más. Pero tranquilidad, que no es para tanto.
¿Cómo crear la data class?
Para crearla he usado el paquete freezed. Puedes verlo en pub.dev clicando aquí. El vídeo que he creado tiene un ejemplo muy sencillito. En el te muestro cómo se instalan los paquetes y cómo se crean las clases.
Cuando lo veas te darás cuenta de la utilidad que tienen las data classes en Dart. Cómo los datos pasan a ser lo que verdaderamente importa.
La importancia de los datos
Aquí los datos son lo que importa. En la siguiente captura de pantalla puedes ver cómo difrentes objetos, al tener los mismos datos, tienen el mismo hashcode. Sí, ¡al tener los mismos datos en realidad son el mismo objeto!



Para que lo veas y entiendas mejor mira el vídeo.
Snippet para crear la Data Class
Como te prometí en el vídeo, aquí te dejo el snippet para crear la clase de datos mucho más rápido. Ta sabes, tienes que añadirlo en el archivo dart.json en Visual Studio Code.
"Freezed Data Class": {
"prefix": "fdataclass",
"body": [
"@freezed",
"class ${1:DataClass} with _$${1:DataClass} {",
" const ${1:DataClass}._();",
" const factory ${1:DataClass}(${2:{}}) = _${1:DataClass};",
"}"
],
"description": "Clase de Datos con Freezed"
},
Código del ejemplo
En el siguiente enlace te paso el código el código del ejemplo de mi repositorio de github.
Deja una respuesta