Anunciando Dart 3.10

¡Hoy estamos emocionados de anunciar el lanzamiento de Dart 3.10!

Banner del release de Dart 3.10 con el logo de Dart y un ícono de diana.
Anunciando Dart 3.10

Este release continúa nuestro enfoque en mejorar la experiencia central del desarrollador. La nueva característica de dot shorthands (.) te ayudará a escribir código más legible y menos verboso. También estamos introduciendo un poderoso nuevo sistema de plugins del analyzer que te permite crear reglas de análisis estático personalizadas que se integran directamente en tu IDE. Y estamos emocionados de anunciar que los build hooks ya son estables.

Este release también trae varias mejoras a pub.dev y la gestión de paquetes. Encontrarás nuevas capacidades de búsqueda en la pestaña "Likes" en tu perfil, y los autores de paquetes ahora pueden deshabilitar la publicación manual para mayor seguridad. Finalmente, hemos añadido un conjunto de nuevas anotaciones de deprecación más específicas para darte un control más fino sobre la evolución de tu API.

Sigue leyendo para aprender más sobre estas y las otras mejoras en Dart 3.10.

Actualizaciones del lenguaje

#

Dot shorthands 🆕

#

Dart 3.10 introduce dot shorthands (.). Esta nueva característica te permite omitir nombres redundantes de clase o enum cuando el compilador puede inferir el tipo a partir del contexto.

Veamos un escenario común: logging. Antes, podrías haber escrito:

dart
enum LogLevel { info, warning, error, debug }

void logMessage(String message, {LogLevel level = LogLevel.info}) {
  // ... implementation
}

// Somewhere else in your app
logMessage('Failed to connect to database', level: LogLevel.error);

Como el parámetro level ya espera un LogLevel, repetir el nombre del enum es innecesario. Con dot shorthands, ahora puedes escribir:

dart
enum LogLevel { info, warning, error, debug }

void logMessage(String message, {LogLevel level = .info}) {
  // ... implementation
}

// Somewhere else in your app
logMessage('Failed to connect to database', level: .error);

El código ahora se enfoca en el valor (.error) en lugar del tipo (LogLevel).

Los dot shorthands no son solo para enums. También puedes usarlos con constructores, métodos estáticos y campos estáticos. Para aprender más, lee nuestra guía de Dot shorthands.

Actualizaciones de herramientas

#

Plugins del analyzer 🆕

#

¿Alguna vez has estado revisando código y has pensado: "¿No debería el analyzer poder detectar eso?". Ahora puede.

Dart 3.10 introduce un poderoso nuevo sistema de plugins para el dart analyzer. Esto te permite escribir y usar tus propias reglas de análisis estático que se integran directamente en IDEs y herramientas de línea de comandos como dart analyze y flutter analyze. Puedes usar plugins del analyzer para:

  • Hacer cumplir reglas específicas del proyecto, como lints y advertencias personalizadas para mantener convenciones en la base de código de tu equipo.

  • Evitar errores comunes y mejores prácticas específicas de tu dominio.

  • Automatizar cambios de código proporcionando quick fixes y assists para ayudar a corregir automáticamente problemas o migrar a nuevas APIs.

Este nuevo sistema es el resultado de un esfuerzo arquitectónico significativo para habilitar un ecosistema rico de herramientas impulsadas por la comunidad, y nos gustaría extender un agradecimiento especial al colaborador de la comunidad Felipe Morschel por sus valiosas correcciones y características para el analyzer en general.

Para usar un plugin del analyzer, simplemente añádelo a tu archivo analysis_options.yaml:

yaml
analyzer:
  plugins:
    - some_plugin
    - another_plugin

Para aprender más sobre cómo crear tus propias reglas personalizadas, consulta la documentación para escribir un plugin del analyzer.

Build hooks 🚀

#

Integrar código nativo (como C++, Rust o Swift) en un paquete de Dart a menudo ha requerido gestionar archivos de build complejos y específicos de plataforma como CMake o Gradle. Con Dart 3.10, este proceso ahora es dramáticamente más simple.

Estamos emocionados de anunciar que los build hooks (anteriormente conocidos como native assets) ya son estables. Puedes usar estos hooks para compilar código nativo o descargar assets nativos (como bibliotecas dinámicas) y empaquetarlos directamente con tu paquete de Dart. Esta poderosa capacidad te permite reutilizar código nativo o bibliotecas existentes desde dentro de tu paquete y elimina la necesidad de escribir archivos de build separados como SPM, Gradle o CMake para diferentes sistemas operativos.

Para aprender más, consulta la documentación para escribir un build hook, o mira el episodio del Flutter Build show sobre build hooks.

Lint Remove Deprecations 🆕

#

Cuando lanzas una nueva versión mayor de un paquete (como 1.0.0 o 0.2.0), es una buena práctica eliminar cualquier API que hayas marcado previamente como deprecada. Esto mantiene tu paquete limpio y evita que los desarrolladores usen código desactualizado. Sin embargo, es fácil olvidar este paso durante el proceso de release.

Para ayudar, hemos introducido un nuevo lint: remove_deprecations_in_breaking_versions. Este lint detecta elementos deprecados que quedaron cuando la versión de un paquete se actualiza a una nueva versión mayor que rompe compatibilidad. Al marcar estos casos, el lint ayuda a asegurar que la API de tu paquete permanezca moderna y fácil de entender para tus usuarios.

Ejemplo del lint remove deprecations in breaking versions.
Ejemplo del lint remove_deprecations_in_breaking_versions

Anotación @Deprecated ⬆️

#

La anotación existente @Deprecated es una herramienta burda. Informa a los desarrolladores que una API ya no es recomendada, pero no permite matices. Por ejemplo, ¿cómo señalas que una clase ya no debería ser extendida, pero aún puede ser instanciada?

Para dar a los autores de paquetes un control más preciso sobre la evolución de su API, Dart 3.10 introduce un conjunto de nuevas anotaciones de deprecación más específicas.

Ahora puedes deprecar casos de uso específicos para clases y mixins:

Además, ahora puedes señalar que un parámetro opcional se volverá obligatorio en una versión futura usando @Deprecated.optional().

Actualizaciones de Pub

#

Búsqueda, ordenamiento y soporte para quitar likes de tus paquetes favoritos 🆕

#

Gestionar tus paquetes favoritos en pub.dev acaba de recibir una mejora importante. Puedes hacerlo a través de la función de búsqueda o la pestaña de Likes en tu perfil, donde ahora puedes buscar, ordenar y filtrar tus paquetes favoritos con los mismos controles familiares que usas para búsquedas regulares. Esto incluye ordenar por likes, pub points y popularidad. También hemos mejorado la UI para quitar likes de paquetes, haciéndolo más fácil que nunca mantener tu lista de paquetes favoritos ordenada y actualizada.

Pestaña Likes de pub.dev con soporte de búsqueda, ordenamiento y quitar likes.
Búsqueda, ordenamiento y soporte para quitar likes de tus paquetes favoritos en tu pestaña de Likes

Si decides buscar tus paquetes favoritos con la función de búsqueda, simplemente añade is:liked-by-me a tu consulta.

Página de búsqueda de pub.dev filtrada a paquetes que te gustaron.
Buscar, pero solo incluyendo paquetes que te gustan

Habilitar o deshabilitar la publicación manual 🆕

#

Para mejorar la seguridad y prevenir publicaciones accidentales, ahora puedes deshabilitar la publicación manual (pub publish) para tus paquetes. Esto es ideal para paquetes que tienen un flujo de publicación automatizado o que ya no se publican activamente.

Al deshabilitar la publicación manual, previenes actualizaciones de paquetes usando credenciales personales, reduciendo el riesgo de un release no autorizado o accidental.

Puedes controlar esta característica en la pestaña de Admin de tu paquete usando la casilla "Enable manual publishing".

Habilitar o deshabilitar la publicación manual en la pestaña Admin.
Habilitar o deshabilitar la publicación manual en la pestaña Admin

Conclusión

#

El release de Dart 3.10 trae una serie de mejoras enfocadas en la productividad del desarrollador, las herramientas y la salud general del ecosistema de paquetes. Desde características del lenguaje como dot shorthands que hacen tu código más conciso, hasta poderosas nuevas capacidades de herramientas como plugins del analyzer y build hooks estables, esperamos que este release te empodere para construir apps aún mejores.

Estamos increíblemente agradecidos por los muchos ingenieros y equipos que contribuyeron a este release, incluyendo un agradecimiento especial a nuestros colaboradores de la comunidad que ayudan a hacer Dart mejor para todos.

Estamos emocionados de ver qué construyes con Dart 3.10. Para empezar, puedes obtener el Dart 3.10 SDK hoy. Para una lista completa de todas las características nuevas y actualizadas, consulta el changelog del Dart SDK.

Más de Dart