Dart 2.16: Herramientas y manejo de plataforma mejorados

Soportando Flutter para Windows con etiquetado de plataforma de paquetes y una nueva experiencia de búsqueda para pub.dev

Hoy está disponible la versión 2.16 del SDK de Dart. No tiene nuevas características del lenguaje, pero un montón de correcciones de errores (incluyendo una corrección para una vulnerabilidad de seguridad), soporte mejorado para especificar las plataformas que los paquetes de Dart soportan, y una nueva experiencia de búsqueda para pub.dev.

Dart 2.16

#

El SDK de Dart 2.16, que se lanza hoy junto con Flutter 2.10, continúa la transición de las herramientas CLI heredadas de Dart (dartfmt, dartdoc, etc.) a la nueva herramienta dart combinada para desarrolladores. Las herramientas recientemente deprecadas son dartdoc (usa dart doc) y dartanalyzer (usa dart analyze). En Dart 2.17 planeamos eliminar completamente los comandos dartdoc, dartanalyzer y pub (deprecados en Dart 2.15; usa dart pub o flutter pub). Para más detalles, ver issue #46100.

El release 2.16 también incluye una corrección para una vulnerabilidad de seguridad y dos pequeños breaking changes:

  • La API de HttpClient en dart:io permite establecer headers opcionales para authorization, www-authenticate, cookie y cookie2. La implementación de la lógica de redirección en SDKs anteriores a Dart 2.16 tiene una vulnerabilidad donde estos headers — que pueden contener información sensible — se pasan cuando ocurre una redirección cross-origin. En Dart 2.16 estos headers se eliminan. Para más detalles, ver CVE-2022–0451.

  • La API Directory.rename en dart:io ha cambiado su comportamiento en Windows: ya no elimina un directorio existente que coincida con el nombre objetivo (issue #47653).

  • Las APIs Platform.packageRoot y Isolate.packageRoot — que son heredadas de Dart 1.x y no funcionales en Dart 2.x — han sido eliminadas (issue #47769).

Para encontrar más detalles sobre los cambios en Dart 2.16, ver el changelog.

Nuevo soporte para declarar plataformas soportadas en paquetes de pub.dev

#

Dart está diseñado para portabilidad, y nos esforzamos por habilitar código que se ejecute en la mayor selección de plataformas. Sin embargo, ocasionalmente puedes crear y compartir paquetes en pub.dev que han sido diseñados para solo una, o unas pocas, plataformas. Puedes tener un paquete que depende de una API que está disponible solo en un sistema operativo particular, o un paquete que usa una librería como dart:ffi que está soportada solo en plataformas nativas y no en la web.

Con Dart 2.16 ahora puedes declarar el conjunto de plataformas soportadas manualmente en el pubspec del paquete. Por ejemplo, si tu paquete solo soporta Windows y macOS, su archivo pubspec.yaml podría verse así:

name: mypackage
version: 1.0.0

platforms:
  windows:
  macos:

dependencies:

El nuevo tag platforms está pensado para casos donde estás desarrollando un paquete de Dart, y quieres declarar soporte para un conjunto diferente de plataformas del que pub.dev detecta automáticamente. Si estás desarrollando y compartiendo un plugin de Flutter que contiene código específico del host (por ejemplo, Kotlin o Swift), el tag de plugin de Flutter típicamente especifica las plataformas soportadas.

Nueva UI de búsqueda de pub.dev

#

Respondiendo a peticiones de desarrolladores, hemos creado mejor soporte para buscar paquetes en pub.dev. El objetivo principal de los cambios que se lanzan hoy es ayudarte a identificar y buscar el conjunto de plataformas soportadas. Aquí tienes una vista de la nueva experiencia de búsqueda:

Interfaz de búsqueda de pub.dev con filtros de barra lateral para plataformas, SDKs y búsqueda avanzada.
Interfaz de búsqueda de pub.dev con barra lateral conteniendo filtros de búsqueda de Platforms, SDKs y Advanced

La nueva UI de búsqueda tiene una barra lateral de filtros de búsqueda a la izquierda, que puedes usar para acotar tu búsqueda de paquetes:

  • Plataformas: Selecciona una o más plataformas para acotar los resultados de búsqueda solo a paquetes que soportan todas esas plataformas seleccionadas.

  • SDKs: Selecciona Dart o Flutter para limitar los resultados a paquetes que soportan el SDK de Dart o el SDK de Flutter, respectivamente.

  • Avanzado: Opciones de búsqueda adicionales como filtrar por paquetes Flutter Favorite.

Actualización de null safety

#

Ha pasado algunas versiones desde que hablamos por última vez de null safety, la mayor adición al lenguaje que se lanzó hace un año en Dart 2.12. Nos ha sorprendido la velocidad con la que el ecosistema de Dart ha migrado paquetes para soportar null safety: ¡A día de hoy, el 100% de los 250 paquetes principales — y el 96% de los 1000 principales — soportan null safety! Gracias a todos los autores de paquetes que han contribuido a este gran logro.

También hemos visto buen progreso en apps migrando a sound null safety (el estado donde el código de la app y todas las dependencias de paquetes han migrado). Según nuestros análisis, el 71% de todas las sesiones de ejecución en la herramienta de Flutter ahora tienen sound null safety completa. Si eres desarrollador de apps y todavía no has migrado, ahora es un gran momento.

Comentarios finales

#

Esperamos que la nueva UI de búsqueda de pub.dev te sea útil, y agradecemos cualquier feedback que puedas tener. Atentos al próximo release del SDK de Dart, que está programado para el segundo trimestre de 2022. Estamos trabajando en varias características emocionantes del lenguaje que esperamos lanzar más adelante este año.

Más de Dart