Anunciando Dart 3.12
Potenciando la productividad de los desarrolladores en Google I/O 2026
Este año en Google I/O 2026, los equipos de Flutter y Dart están celebrando un poderoso tema: Everywhere, everyday, built by everyone, for everyone.
Dart 3.12 da vida a este tema. Estamos haciendo el lenguaje más accesible y productivo. Nuevas primitivas concisas como private named parameters, junto con soporte experimental para primary constructors, hacen que la programación diaria sea más limpia. Pero no nos detuvimos en el nivel de sintaxis. Nuevas características como Agentic Hot Reload y la adición de Genkit al ecosistema de Dart aseguran que puedas construir apps de alto rendimiento, listas para IA y agentic que llegan a los usuarios en cualquier lugar. Esto es cierto ya sea que programes solo o hagas pair-programming con un agente de IA.
Así que actualiza Dart o ejecuta flutter upgrade
y sigue junto a nosotros para explorar las nuevas características de Dart 3.12. Pero recuerda, un Dart más potente es solo la mitad de la historia. Cuando estés listo para ver cómo estas características se traducen en una hermosa UI, consulta la publicación del blog
What's new in Flutter.
Actualizaciones del lenguaje
#Private named parameters
#Los initializing formals de Dart, usando la sintaxis de constructor this., son increíblemente convenientes. Mapean un parámetro de constructor directamente a un campo de clase. Esto elimina la necesidad de escribir código repetitivo.
Pero había un problema. Los initializing formals tenían dificultades al combinar named parameters con campos privados. Antes de Dart 3.12, el lenguaje no permitía que un named parameter empezara con un guion bajo:
class Hummingbird {
final String _petName;
final int _wingbeatsPerSecond;
// Compile error! Can't have private named parameter. :(
Hummingbird({required this._petName, required this._wingbeatsPerSecond});
}
En su lugar, tenías que escribir una initializer list explícita:
class Hummingbird {
final String _petName;
final int _wingbeatsPerSecond;
Hummingbird({required String petName, required int wingbeatsPerSecond})
: _petName = petName,
_wingbeatsPerSecond = wingbeatsPerSecond;
}
Esto era tedioso. Todo lo que hace la initializer list es eliminar el _. Añadía código repetitivo innecesario a clases simples.
En Dart 3.12, el lenguaje puede hacer eso por ti. Dart ahora te permite escribir private named initializing formals:
class Hummingbird {
final String _petName;
final int _wingbeatsPerSecond;
// OK with "Private Named Parameters"! :D
Hummingbird({required this._petName, required this._wingbeatsPerSecond});
}
Este código se comporta exactamente como el ejemplo anterior. Los campos inicializados son privados, pero los parámetros del constructor y los nombres de argumentos escritos en el call site tienen los nombres públicos correspondientes:
void main() {
print(Hummingbird(petName: 'Dash', wingbeatsPerSecond: 75));
}
Learn more: Documentación de private named parameters
Primary constructors (fase experimental)
#Estamos emocionados de ofrecer un vistazo temprano a una de las características de sintaxis más solicitadas en Dart. Los primary constructors representan un gran paso adelante para la concisión de clases. Eliminan la necesidad de repetir nombres de campos y tipos a través del cuerpo de tu clase y listas de parámetros.
Normalmente, incluso una simple clase de dos campos requiere múltiples líneas de código repetitivo:
class Point {
final int x;
final int y;
Point(this.x, this.y);
}
Los primary constructors cambian esto completamente. Ahora puedes reemplazar el código repetitivo con una sola línea de código declarando parámetros directamente en el encabezado de la clase.
class Point(final int x, final int y);
La característica va más allá. Introduce una sintaxis más corta para declarar constructores dentro del cuerpo de la clase usando las palabras clave
new o factory. También permite que las clases con cuerpo vacío terminen con un simple punto y coma:
class Pet {
String name;
new() : name = 'Fluffy';
new withName(this.name);
}
class Dog extends Pet;
Los primary constructors se lanzan como una vista previa experimental en Dart 3.12. Como este es un cambio fundamental en cómo se definen las clases de Dart, tus comentarios del mundo real son cruciales. Puedes habilitar la característica usando el
primary-constructors flag al ejecutar tu proyecto:
dart run --enable-experiment=primary-constructors bin/main.dart
Si encuentras algún problema o tienes comentarios sobre el diseño, por favor abre un issue en el repositorio del Dart SDK
(y siéntete libre de hacer cc a @kallentu). ¡Esperamos escuchar tus opiniones!
Learn more: Documentación de primary constructors
Actualizaciones del ecosistema
#Vista previa de Genkit Dart
#Estamos emocionados de anunciar el lanzamiento de la vista previa de Genkit Dart, un framework de código abierto para construir apps agentic de Dart y Flutter full-stack con IA para cualquier plataforma. Proporciona todo lo que necesitas para apps con IA out of the box:
- API agnóstica de modelo: Soporta modelos de Google, Anthropic, OpenAI y modelos compatibles con OpenAI.
- Seguridad de tipos: Combina el fuerte sistema de tipos de Dart con el paquete
schematicpara generación de datos y flujos fuertemente tipados. - Ejecuta en cualquier lugar: Escribe lógica de IA una vez y ejecútala en un servicio backend o directamente dentro de tu app de Flutter.
- UI de desarrollador: Incluye una UI web local para probar prompts, ver traces y depurar flujos de trabajo.
- Primitivas de IA principales: Soporte integrado para salida estructurada, tool calling y flujos de múltiples pasos.
Llama a múltiples modelos en solo unas líneas de código:
import 'package:genkit/genkit.dart';
import 'package:genkit_google_genai/genkit_google_genai.dart';
import 'package:genkit_anthropic/genkit_anthropic.dart';
void main() async {
final ai = Genkit(plugins: [googleAI(), anthropic()]);
// Call a Gemini model from Google.
final geminiResponse = await ai.generate(
model: googleAI.gemini('gemini-flash-latest'),
prompt: 'Hello from Gemini',
);
// Call a Claude model from Anthropic.
final claudeResponse = await ai.generate(
model: anthropic.model('claude-opus-4.6'),
prompt: 'Hello from Claude',
);
}
Chatea con el equipo de Genkit en Discord y reporta cualquier problema en GitHub.
Learn more: Empieza con Genkit para Dart
Cloud Functions for Firebase y soporte experimental de Dart
#También estamos emocionados de destacar el reciente anuncio de soporte experimental para Dart en Cloud Functions for Firebase. Durante años, extender una app de Flutter a la nube significaba cambiar de contexto a otros lenguajes backend y duplicar estructuras de datos.
Ahora, puedes construir una aplicación Dart full-stack verdaderamente unificada. Aprovechando el patrón "Shared Package", puedes compartir tus modelos de datos, reglas de validación y lógica de negocio directamente entre tu frontend y backend — eliminando completamente el "Double-Doc Tax".
Gracias a la compilación Ahead-of-Time (AOT) de Dart, tus serverless functions se benefician de cold starts increíblemente rápidos, dándote escalado instantáneo y rendimiento sin la molestia de Dockerfiles o configuración de contenedores.
Learn more: Publicación del blog de Dart y Firebase.
Actualizaciones de herramientas
#Agentic Hot Reload
#Hemos escuchado de nuestra comunidad que quieren que los agentes de programación con IA funcionen sin problemas al usar Dart y Flutter. Por eso estamos lanzando Agentic Hot Reload para apps de Dart y Flutter, una nueva característica diseñada para mantenerte a ti y a tu agente de programación en flujo. Usando el servidor MCP de Dart, tu agente de programación ahora puede hacer hot reload automáticamente, eliminando la fricción de tener que encontrar y copiar manualmente las URIs de conexión del Dart Tooling Daemon (DTD).
Detrás de escena, el Dart Tooling Daemon expone automáticamente los detalles de conexión a través de un comando CLI ejecutado por el servidor MCP, permitiendo que tu agente de programación descubra y se conecte instantáneamente a tu app en ejecución en tu workspace.
Sin configuración, esta integración agiliza tus flujos de trabajo diarios. Puedes simplemente pedirle a tu agente de programación que arregle un bug, cambie un widget de UI o diagnostique un crash. El agent modificará tu código autónomamente, obtendrá diagnósticos de runtime en vivo y hará hot reload de la app en tiempo real.
Diagnósticos de rendimiento del servidor de análisis
#Para construir las mejores herramientas para todos, queremos entender el rendimiento del Dart Analysis Server (DAS) exactamente como lo experimentas en tu máquina. Para hacer esto posible, hemos introducido el nuevo comando
dart info record-performance.
Los desarrolladores que experimentan tiempos de análisis lentos o completado no responsivo pueden usar este comando para capturar traces de ejecución y datos de CPU profiling de procesos DAS activos en sus máquinas. Incluir estos traces cuando abras issues en GitHub le da a nuestro equipo los datos exactos del mundo real necesarios para diagnosticar y resolver cuellos de botella de rendimiento complejos. Al compartir tus traces, nos ayudas directamente a hacer Dart más rápido y confiable para cada desarrollador.
Actualizaciones de Pub
#Soporte nativo de Git LFS en pub
#
Usar paquetes con archivos grandes es ahora más simple que nunca. A partir de Dart 3.12, dart pub soporta nativamente dependencias git con Git Large File Storage (LFS).
No necesitas ninguna configuración personalizada en tu archivo pubspec.yaml. Mientras git lfs
esté instalado en tu máquina, el cliente pub maneja todo automáticamente:
dependencies:
kittens:
git: https://github.com/munificent/kittens.git
Esta es una mejora importante para equipos que versionan grandes assets de media, modelos de datos o binarios directamente dentro de sus repositorios git.
Conclusión
#Dart 3.12 representa un hito importante en la eliminación de fricción para el desarrollador. Desde adiciones de sintaxis concisa hasta flujos de trabajo agentic de IA sin interrupciones y un ecosistema de IA más fuerte, este release está construido para apoyarte. Cada característica está diseñada para hacer tu desarrollo diario limpio y eficiente.
Estamos emocionados de ver qué construyes con estas nuevas capacidades. Esperamos que actualices Dart o actualices Flutter hoy para probar estas actualizaciones. Si estás probando nuestras características experimentales como primary constructors, por favor comparte tus comentarios. Juntos, seguiremos construyendo un lenguaje que aporte alegría a todos los desarrolladores, todos los días y en todas partes.
Learn more: Changelog del Dart SDK