Anunciando Dart 3.8
Esta versión trae actualizaciones del formateador, elementos null-aware para colecciones, nuevas capacidades de desarrollo multiplataforma, una mejor manera de…
Este release trae actualizaciones del formateador, null-aware elements para colecciones, nuevas capacidades de desarrollo multiplataforma, una mejor forma de encontrar paquetes trending en pub.dev, disponibilidad de hot reload en web, ¡y más! También esperamos que haya algunos desarrolladores interesados en unirse a nuestro programa de acceso temprano para FFigen y JNIgen.
Actualizaciones del formateador
#En el release anterior, Dart incluyó un formateador ampliamente reescrito que soportaba un nuevo estilo "tall". El release de Dart 3.8 incorpora feedback adicional, corrige bugs reportados, y añade otras mejoras.
Ten en cuenta que si actualizas al SDK de Dart 3.8, tu formateo no cambiará hasta que cambies el pubspec de tu paquete para optar por la última versión del lenguaje.
Trailing commas y código más alto
#En releases anteriores, una trailing comma forzaba a la construcción circundante a dividirse. El nuevo formateador ahora decide si una construcción debería dividirse y luego añade o elimina la trailing comma según sea necesario.
// Before formatter
TabBar(tabs: [Tab(text: 'A'), Tab(text: 'B')], labelColor: Colors.white70);
// After formatter
TabBar(
tabs: [
Tab(text: 'A'),
Tab(text: 'B'),
],
labelColor: Colors.white70,
);
Si prefieres el comportamiento anterior, puedes volver a habilitarlo con un flag de configuración .
Cambios de estilo
#Se añadieron varios cambios de estilo que ajustan y mejoran la salida. Aquí hay algunos ejemplos:
// Previously released formatter (functions)
function(
name:
(param) => another(
argument1,
argument2,
),
);
// Dart 3.8 formatter (functions)
function(
name: (param) => another(
argument1,
argument2,
),
);
// Previously released formatter (variables)
variable =
target.property
.method()
.another();
// Dart 3.8 formatter (variables)
variable = target.property
.method()
.another();
Cross compilation
#Hay nuevo soporte para compilar
a binarios nativos de Linux desde máquinas de desarrollo Windows, macOS, y Linux. Puedes hacer esto con el comando
dart compile exe o dart compile aot-snapshot y los flags --target-os
y --target-arch.
// cross compilation example for an exe
$ dart compile exe --target-os=linux --target-arch=arm64
// cross compilation example for an aot-snapshot
$ dart compile aot-snapshot --target-os=linux --target-arch=arm64
Casos de uso de ejemplo:
-
Compilaciones más rápidas para dispositivos embebidos (por ejemplo, una Raspberry Pi) en una laptop de desarrollo rápida, en lugar del dispositivo embebido menos potente.
Compilaciones más rápidas para un backend basado en Linux en una máquina de desarrollo no-Linux.
Null-aware elements
#Los nuevos null-aware elements te permiten añadir elementos a una colección como una lista, set, o map, si los elementos no son null. Para hacer que un elemento sea un null-aware element en un collection literal, antepónle
?.
Una lista sin null-aware elements que elimina valores null:
// Code without null-aware elements
var listWithoutNullAwareElements = [
if (promotableNullableValue != null)
promotableNullableValue,
if (nullable.value != null)
nullable.value!,
if (nullable.value case var value?)
value,
];
Una lista con null-aware elements que elimina valores null:
// Code with null-aware elements
var listWithNullAwareElements = [
?promotableNullableValue,
?nullable.value,
?nullable.value,
];
Doc imports
#Ahora hay soporte para doc imports, una nueva sintaxis basada en comentarios que permite referenciar elementos externos en comentarios de documentación sin importarlos realmente. Esta etiqueta puede especificarse en un doc comment encima de una directiva
library.
En el siguiente ejemplo, [Future] y [Future.value] se importan desde la librería
dart:async, pero solo para comentarios de documentación:
/// @docImport 'dart:async';
library;
/// Doc comments can now reference elements like
/// [Future] and [Future.value] from `dart:async`,
/// even if the library is not imported with an
/// actual import.
class Foo {}
Los doc imports soportan los mismos estilos de URI que las importaciones regulares de Dart, incluyendo el esquema dart:, el esquema
package: y rutas relativas. Sin embargo, no pueden ser deferred ni configurarse con as,
show, hide.
Paquetes trending en pub.dev
#La página de inicio de pub.dev reemplaza la sección "Most Popular Packages" con la sección "Trending Packages". Esta nueva sección muestra paquetes que han demostrado recientemente un crecimiento notable en adopción e interés de la comunidad.
Hot reload en web (experimental)
#Stateful hot reload ya está disponible en web cuando usas el Dart Development Compiler (DDC). Un rediseño de la representación JS del código Dart te permite intercambiar código en una aplicación en ejecución.
El trabajo sigue iterando en esta característica, pero Dart 3.8 ofrece la primera oportunidad para probarla, comenzando con apps de Flutter. Consulta el post del blog de Flutter para instrucciones sobre cómo habilitar hot reload.
Este fue un esfuerzo de varios años que incluyó cambiar la representación de tipos en runtime, rediseñar jerarquías de clases, y actualizar la forma en que el código se carga en la página. El objetivo es alcanzar paridad completa con la implementación existente de hot reload de la VM. En casi todos los casos, la característica ya debería ser indistinguible de lo que estás acostumbrado de la VM. Puedes encontrar todos los issues conocidos en el issue tracker.
El enfoque hace esta característica accesible primero en apps de Flutter, pero el plan es integrar hot reload en
build_web_compilers para su uso en apps web no-Flutter más adelante.
Interoperabilidad nativa directa
#Estamos emocionados de lanzar un programa de acceso temprano para FFigen y JNIgen, las soluciones de codegen diseñadas para simplificar la integración de APIs de plataforma nativa. Buscamos autores de plugins de Flutter que quieran desarrollar o refactorizar plugins con estas soluciones.
Para más información, lee el post del blog titulado Flutter's Path Towards Seamless Interop. Cubre nuestras aspiraciones para la interoperabilidad nativa directa, la hoja de ruta para lograrlas, y el programa de acceso temprano.
Conclusión
#Dart 3.8 es un testimonio de nuestro compromiso continuo de refinar la experiencia de desarrollo. Te animamos a explorar estas nuevas características — desde el formateador inteligente y el soporte de cross-compilation hasta null-aware elements, hot reload en web, y el acceso temprano para interop nativo. Tus insights y contribuciones son vitales para el crecimiento continuo de Dart y Flutter, y estamos ansiosos por ver las apps que crearás.
¡Actualiza a Dart 3.8 hoy y feliz codificación!