Cambios importantes y obsolescencias
Una lista de cambios importantes por versión en Dart.
Esta página enumera todos los cambios importantes y obsolescencias en las actualizaciones del SDK de Dart, organizados por versión y área, para ayudar a los desarrolladores de Dart a comprender y gestionar su impacto. Las notas completas de la versión están disponibles en el changelog del SDK de Dart. El documento de la política de cambios importantes describe la política y el proceso en torno a los cambios importantes y las obsolescencias en Dart.
Esta página incluye los siguientes tipos de cambios importantes:
- No versionados
-
El SDK de Dart no mantiene la compatibilidad hacia atrás, y el código podría romperse tan pronto como actualices la versión de tu SDK si depende del comportamiento anterior.
Estos representan la mayoría de los cambios y no están marcados especialmente en esta lista.
- Versionados por lenguaje
-
El SDK de Dart mantiene la compatibilidad hacia atrás para el código existente, y el cambio de comportamiento solo surte efecto (rompiendo potencialmente el código que depende del comportamiento anterior) cuando actualizas la versión de lenguaje de tu código.
These are marked as: Con versión de lenguaje
- Obsolescencias
-
El SDK de Dart mantiene la compatibilidad para el código obsoleto, con una advertencia. Las obsolescencias se eliminan por completo en una versión posterior, rompiendo cualquier código que dependa del comportamiento anterior.
These are marked as: Obsoleto / Eliminado
- Experimental
-
Parte de la versión pero aún no tratado como estable en el SDK y puede romperse de una versión a otra. Los cambios experimentales no siempre tienen un problema de cambio importante correspondiente, pero podrían tener más detalles en el changelog del SDK.
Estos están marcados: Experimental
Si tienes preguntas o inquietudes sobre cualquiera de estos cambios importantes, por favor comenta en el hilo del cambio importante enlazado desde la entrada correspondiente. Para recibir notificaciones sobre futuros cambios importantes, únete al grupo Dart announce.
3.13.0
#Bibliotecas
#dart:io
#
NetworkInterface.addressesahora devuelveList<InterfaceAddress>en lugar deList<InternetAddress>. El nuevo subtipoInterfaceAddressdeInternetAddressexpone un campoprefixLengthy un getterbroadcast. El código que implementaNetworkInterfacey sobrescribeaddressesdebe actualizar el tipo de retorno.
dart:js_interop
#
JSFunctionyJSExportedDartFunctionahora son genéricos.JSExportedDartFunction<T>.toDartahora convierte (cast) la función envuelta original al argumento de tipoT, eisA<JSExportedDartFunction<T>>ahora también comprueba que la función envuelta es de tipoT. Los tipos en tiempo de ejecución deJSFunctionyJSExportedDartFunctionno cambian.
Herramientas
#Formateador (dart format)
#
-
Se dejó de añadir una línea en blanco antes de un comentario al final de una unidad de compilación o de un cuerpo entre llaves.
-
Las cláusulas de representación de tipo de extensión (extension type) ahora se formatean de la misma manera que las listas de parámetros formales del constructor primario.
-
Cuando se conservan las comas finales, ya no se inserta una nueva línea antes del
;en un enum con miembros a menos que haya una coma final. Se corrigió un error por el cual algunas colecciones o argumentos podían dividirse innecesariamente.
-
Versionados por lenguaje Las listas de parámetros ahora pueden formatearse en bloque.
-
Versionados por lenguaje Las expresiones
as,iseis!ahora pueden formatearse en bloque. -
Versionados por lenguaje Se añaden líneas en blanco alrededor de las declaraciones de
mixiny deextension typesi no tienen un cuerpo con;.
Tiempo de ejecución
#- Eliminado
Ya no se incluyen los certificados raíz de respaldo incorporados que se utilizaban cuando
no se encontraban los certificados del sistema.
Si no se encuentran los certificados del sistema,
utiliza las opciones
--root-certs-fileo--root-certs-cachepara proporcionar certificados de respaldo a la Dart VM independiente.
3.12.0
#Bibliotecas
#dart:js_interop
#
- El método de extensión
isAse ha movido deJSAnyUtilityExtensionaNullableObjectUtilExtensionpara admitir la comprobación de tipos de cualquierObject?. Este cambio solo es importante si te referías al nombre de la extensión directamente, ya sea aplicando la extensión directamente o mediante las directivasshowohide. isA<JSObject>()ahora maneja correctamente los objetos JS sin prototipos, eisA<JSAny>()realiza una comprobación no trivial de que el valor es un valor JS.isA<JSExportedDartFunction>()ahora comprueba si la función es realmente una función envoltura de JS que se devuelve desdeFunction.toJSoFunction.toJSCaptureThis.
Herramientas
#Pub
#dart pub cache repairahora solo repara los paquetes referenciados por el archivopubspec.lockdel proyecto actual de forma predeterminada. Para reparar todos los paquetes en la caché de pub como en versiones anteriores, pasa la nueva bandera--all.
Compilador Wasm (dart2wasm)
#- La API del cargador de módulos de carga diferida (deferred loading) se ha actualizado para permitir
la obtención por lotes de módulos diferidos.
El embebedor ahora toma
loadDeferredModulesen lugar deloadDeferredModule, where la nueva función debe esperar una matriz (array) de nombres de módulos en lugar de nombres de módulos individuales. Todas las funciones de carga de módulos ahora también deben aceptar un callbackinstantiatoral que deben pasar los resultados cargados.
Compilador de producción JavaScript (dart2js)
#JSExportedDartFunction.toDartahora lanza una excepción si la función JS envoltura (wrapper) no fue resultado deFunction.toJSoFunction.toJSCaptureThis, para ser consistente con DDC y dart2wasm. Anteriormente, a veces devolvía incorrectamente la función Dart original incluso si la función JS envoltura se convertía (cast) desde una llamada a la función obsoletaallowInterop.
3.11.0
#Herramientas
#Analizador
#-
Obsoleto La regla de linter
avoid_null_checks_in_equality_operatorsestá obsoleta y debe eliminarse de los archivosanalysis_options.yaml. -
Obsoleto La regla de linter
prefer_final_parametersestá obsoleta y debe eliminarse de los archivosanalysis_options.yaml. -
Obsoleto La regla de linter
use_if_null_to_convert_nulls_to_boolsestá obsoleta y debe eliminarse de los archivosanalysis_options.yaml.
Compilación Wasm (dart compile wasm)
#
-
Eliminado El código que importa
dart:js_utilopackage:jsahora da como resultado un error de compilación al compilar a WebAssembly.La invocación de cualquier API de estas bibliotecas dará como resultado un error en tiempo de ejecución. Los usos deben migrarse a
dart:js_interopydart:js_interop_unsafe.
3.10.0
#Lenguaje
#- Las funciones generadoras
sync*yasync*sin un retorno especificado ahora infieren correctamente los tipos de retorno como no nulables cuando no se produce ningún valornull. Esto podría activar nuevos diagnósticos relacionados con elementos de código innecesarios, como un operador de acceso condicional de nulos innecesario (?.).
Bibliotecas
#dart:core
#
-
Las funciones
Uri.parseIPv4AddressyUri.parseIPv6Addressya no permiten incorrectamente ceros a la izquierda en las direcciones IPv4. -
Obsoleto La capacidad de implementar
RegExpyRegExpMatchestá obsoleta y se eliminará en una versión futura.
dart:io
#
IOOverridesya no se puede implementar, pero aún se puede extender.
dart:js_interop
#
-
La extensión
Uint16ListToJSInt16Arrayha sido renombrada aUint16ListToJSUint16Array. -
La extensión
JSUint16ArrayToInt16Listha sido renombrada aJSUint16ArrayToUint16List. -
La función
Function.toJSCaptureThisahora produce comprobaciones adicionales en tiempo de compilación para coincidir conFunction.toJS. Si la función no tiene un tipo estáticamente conocido, tiene tipos no admitidos en su firma, incluye parámetros de tipo, o tiene algún parámetro con nombre, la llamada dará como resultado un error en tiempo de compilación.
Herramientas
#SDK
#-
La CLI de
darty la Dart VM son ahora ejecutables separados, llamándosedartvmal ejecutable y proceso de la Dart VM pura. Los programas de Dart aún deben ejecutarse condart run. -
Los subcomandos de la herramienta
dart, comodart formatydart compileahora ejecutan snapshots compilados con AOT de las herramientas subyacentes. No debería haber diferencias funcionales aparte de las mejoras de rendimiento, pero si encuentras incompatibilidades, por favor infórmalas. -
Eliminado La herramienta
dartya no está disponible para plataformas IA32, ya que el SDK de Dart ya no es compatible con IA32.
Analizador
#-
El uso de miembros marcados como
@experimentalfuera del paquete en el que están declarados ahora genera una advertencia. -
Las reglas de linter habilitadas en los archivos de opciones de análisis incluidos ahora producen diagnósticos de linter incompatibles cuando corresponde.
-
Eliminado La anotación obsoleta
@requireddepackage:metaya no es compatible. Para marcar un parámetro como requerido, utiliza en su lugar la palabra claverequired.
Compilación Wasm (dart compile wasm)
#
-
dart:js_utilypackage:jsya no son compatibles al compilar a WebAssembly. La invocación de cualquier API de estas bibliotecas dará como resultado un error en tiempo de ejecución. Los usos deben migrarse adart:js_interopydart:js_interop_unsafe. -
Para coincidir con los compiladores de JS,
dartify, al compilarse a Wasm, ahora convierte los objetos JSPromiseen objetos DartFutureen lugar de objetos DartJSValue.
3.9.0
#Lenguaje
#- Versionados por lenguaje Ahora se asume Null Safety al calcular la promoción de tipos, la alcanzabilidad y la asignación definitiva. Como resultado, un análisis de código muerto mejorado podría hacer que se activen nuevos diagnósticos del analyzer en el código existente que antes superaba el análisis.
Herramientas
#- Algunos subcomandos de la herramienta
dart, comodart analyzeydart fixahora ejecutan snapshots compilados con AOT de las herramientas subyacentes. No debería haber diferencias funcionales aparte de las mejoras de rendimiento, pero si encuentras incompatibilidades, por favor infórmalas.
Pub
#- Versionados por lenguaje
Ahora se respeta el límite superior de la restricción del SDK de
flutteren el paquete raíz de tu espacio de trabajo. Si tu SDK actual no cumple con el límite especificado,dart pub gety otras acciones que recuperan dependencias fallarán.
Dart build
#- Experimental
Compilar un paquete de aplicación de CLI con soporte experimental para recursos nativos ahora
requiere usar el subcomando
dart build cliy especificar el punto de entrada de la aplicación con una nueva opción--target.
3.8.0
#Bibliotecas
#dart:html
#
- Eliminado
El constructor
Element.createdha sido eliminado. - Las clases nativas en
dart:html, comoHtmlElement, ya no se pueden extender.
Herramientas
#Analizador
#- Obsoleto
La regla de linter
avoid_null_checks_in_equality_operatorsestá obsoleta y debe eliminarse de los archivosanalysis_options.yaml.
Compilador de desarrollo JavaScript (DDC)
#- Ahora lanza un error en tiempo de ejecución cuando se realiza un tear-off de un constructor de fábrica de redirección y no se proporciona ningún valor a uno de sus parámetros opcionales no nulables. En el futuro, es probable que esto sea un error en tiempo de compilación.
Compilador de producción JavaScript (dart2js)
#- Experimental Eliminado
Las banderas
--experiment-new-rtiy--use-old-rtiya no son compatibles.
Formateador (dart format)
#
- Versionados por lenguaje El formateador realizó cambios y correcciones que producen un nuevo resultado al formatear código con una versión de lenguaje de 3.8 o superior.
3.7.0
#Lenguaje
#- Versionados por lenguaje Las variables locales y los parámetros nombrados
_ahora no son vinculantes y ya no se pueden usar ni acceder. - El análisis de alcanzabilidad ahora tiene en cuenta si un campo se
promueve de tipo a
Nullusandoisoas. Esto hace que el sistema de tipos sea más autoconsistente, porque refleja el comportamiento de las variables locales promovidas. No se espera que este cambio marque ninguna diferencia en la práctica.
Bibliotecas
#dart:html, dart:indexed:db, dart:svg, dart:web_audio,
dart:web_gl, dart:js
#
- Obsoleto Estas bibliotecas web heredadas están oficialmente obsoletas.
Se espera que se eliminen en una versión futura.
Los proyectos deben migrar para usar
package:webydart:js_interop. Para obtener más información, consulta Migrar apackage:web.
dart:js, dart:js_util, package:js
#
- Obsoleto Estas bibliotecas heredadas de interoperabilidad JS están oficialmente obsoletas.
Se espera que se eliminen en una versión futura.
Los proyectos deben migrar para usar
dart:js_interop. Para obtener más información, consulta Uso de interoperabilidad JS.
Herramientas
#Analizador
#- Eliminado Las reglas de linter
package_api_docsyunsafe_htmlse han eliminado y deben eliminarse de los archivosanalysis_options.yaml.
Formateador (dart format)
#
- Versionados por lenguaje El formateador implementa un nuevo estilo que produce un nuevo resultado al formatear código con una versión de lenguaje de 3.7 o superior.
- Eliminado La bandera
--fixparadart formatya no es compatible. Para aplicar correcciones similares y más, configura tus opciones de análisis y ejecutadart fix. - Obsoleto La opción
--line-lengthparadart formatse ha declarado obsoleta y está programada para eliminarse. Todos los usos deben migrarse a la nueva opción--page-width.
3.6.0
#Lenguaje
#- El contexto utilizado por Dart para realizar la inferencia de tipos en
el operando de una expresión throw ha cambiado del
"tipo desconocido" a
Object. Esto hace que el sistema de tipos sea más autoconsistente, porque refleja el hecho de que no es legal lanzarnull. No se espera que este cambio marque ninguna diferencia en la práctica.
Bibliotecas
#dart:io
#
- Eliminado El constructor
Platform()ha sido eliminado. Todas las instanciaciones dePlatformdeberían eliminarse. HttpClientahora responde a una redirección a la que le falta una cabecera "Location" lanzando unaRedirectExceptionen lugar de unStateError.
Herramientas
#Analizador
#- Obsoleto Las reglas de linter
package_api_docsyunsafe_htmlse han declarado obsoletas y están programadas para eliminarse en Dart 3.7.
Front-end del compilador (cfe)
#- El compilador de Dart ahora calcula las clausuras superior e inferior de los esquemas de tipo justo antes de que se pasen al procedimiento de prueba de subtipos. Antes de Dart 3.6, el compilador los calculaba al principio de los cálculos de límite superior e inferior. El analyzer ya seguía este comportamiento, por lo que es poco probable que las aplicaciones que ya pasan el análisis se vean afectadas por este cambio.
Compilador Wasm (dart2wasm)
#- La condición
dart.library.jsahora esfalseen las importaciones condicionales cuando se compila a WebAssembly. En su lugar, se debe utilizar la condicióndart.library.js_interop.
Formateador (dart format)
#
Los siguientes cambios podrían producir pequeños cambios de formato
al ejecutar dart format con un SDK de Dart 3.6 o posterior:
- Conservar los parámetros de tipo en los parámetros formales con tipo de función de estilo antiguo que
también usan
this.osuper.. - Formatear correctamente importaciones con cláusulas
asyif.
Pub
#dart pub publishahora advierte si los archivos que están siendo rastreados en git tienen cambios sin confirmar (uncommitted).
3.5.0
#Lenguaje
#- El contexto utilizado por el compilador para realizar la inferencia de tipos en
el operando de una expresión
awaitha cambiado para coincidir con el comportamiento del analyzer. - El contexto utilizado por el compilador para realizar la inferencia de tipos en
el lado derecho de una expresión "if-null" (
e1 ?? e2) ha cambiado para coincidir con el comportamiento del analyzer. El comportamiento anterior se puede restaurar proporcionando tipos explícitos.
Bibliotecas
#dart:core
#
DateTimeahora almacena microsegundos en la plataforma web, coincidiendo más estrechamente con el comportamiento en las plataformas nativas.
dart:io
#
dart:js_interop
#
importModuleahora acepta unJSAnyen lugar de unStringpara admitir también otros valores JS, como los objetosTrustedScriptURL.isTruthyynotahora devuelvenJSBooleanen lugar deboolpara ser consistentes con otros métodos de operadores de JS.ExternalDartReferenceya no implementaObject. En su lugar, ahora acepta un parámetro de tipo (T) con un límite (bound) deObject?para capturar el tipo del objeto Dart que se externaliza.
dart:typed_data
#
- Eliminado
Las clases de vista no modificables para datos tipados han sido eliminadas.
En lugar de utilizar los constructores de estas clases, utiliza los
nuevos métodos
asUnmodifiableViewen las listas de datos tipados.
Tiempo de ejecución
#-
Eliminado The Dart VM no longer supports unsound null safety.
- La opción CLI
--no-sound-null-safetyha sido eliminada. - Las funciones
Dart_NewListOfyDart_IsLegacyTypehan sido eliminadas de la API de C.
- La opción CLI
- Eliminado La función
Dart_DefaultCanonicalizeUrlha sido eliminada de la API de C.
3.4.0
#Lenguaje
#-
El esquema de tipo de contexto de patrón para los patrones de cast
ahora es
_(el tipo desconocido) en lugar deObject?. - El esquema de tipos utilizado por los compiladores de Dart para
realizar la inferencia de tipos en el operando de un operador de propagación condicional de nulos (
...?) en literales de mapas y conjuntos se ha hecho nulable, para coincidir con lo que sucede actualmente en los literales de lista.
Bibliotecas
#dart:cli
#
- Experimental Eliminado
La función
waitForha sido eliminada.
dart:html, dart:indexed:db, dart:svg, dart:web_audio,
dart:web_gl
#
- Obsoleto Estas bibliotecas ahora están marcadas como heredadas y
tendrán menos soporte en el futuro.
Los proyectos nuevos deberían preferir usar
package:webydart:js_interop. Para obtener más información, consulta Migrar apackage:web.
dart:js
#
- Obsoleto
Esta biblioteca ahora está marcada como heredada y tendrá menos soporte en el futuro.
Los usos deben migrarse a
dart:js_interopydart:js_interop_unsafe. Para obtener más información, consulta/go/next-gen-js-interop.
dart:js_util
#
- Obsoleto
Esta biblioteca ahora está marcada como heredada y tendrá menos soporte en el futuro.
Los usos deben migrarse a
dart:js_interopydart:js_interop_unsafe. Para obtener más información, consulta/go/next-gen-js-interop.
dart:io
#
Stdouttiene un nuevo campolineTerminator, que permite a los desarrolladores controlar el final de línea utilizado porstdoutystderr. Las clases que implementanStdoutdeben definir el campolineTerminator. La semántica predeterminada destdoutystderrno ha cambiado.- Obsoleto La propiedad
FileSystemDeleteEvent.isDirectory. Siempre devuelvefalse.
dart:typed_data
#
- Obsoleto
Las clases de vista no modificables para datos tipados están obsoletas.
En lugar de utilizar los constructores de estas clases, utiliza los
nuevos métodos
asUnmodifiableViewen las listas de datos tipados.
Herramientas
#Compilador de producción JavaScript (dart2js)
#- Experimental Obsoleto
Ahora debes especificar un formato para
la opción de CLI
--dump-info, ya seabinaryojson. El formatojsonestá obsoleto y podría eliminarse en una futura versión de Dart.
Compilador Wasm (dart2wasm)
#- Experimental Varios argumentos de CLI de
dart compile wasmhan sido actualizados, eliminados o reemplazados. Para obtener más información, ejecutadart compile wasm --verbose --help.
Tiempo de ejecución
#- Eliminado La Dart VM ya no admite cadenas externas.
Como resultado, las funciones
Dart_IsExternalString,Dart_NewExternalLatin1StringyDart_NewExternalUTF16Stringhan sido eliminadas de la API de C de Dart.
3.3.0
#SDK
#-
Experimental Eliminado Los siguientes experimentos ahora están retirados ya que fueron lanzados en Dart 3 y ya no son necesarios con una versión de lenguaje de 3.0 o superior. Su configuración debe ser eliminada de las opciones de análisis, comandos de CLI y configuraciones del IDE.
patternsrecordsclass-modifierssealed-class
Lenguaje
#Bibliotecas
#dart:cli
#
- Experimental Obsoleto
La función
waitForsigue estando obsoleta por otra versión más y está programada para su eliminación en Dart 3.4.
dart:ffi
#
- Obsoleto Los métodos de aritmética de punteros
elementAten los tiposPointerestán obsoletos. Migra en su lugar a los operadores-y+. - Experimental Eliminado
La anotación
@FfiNativepreviamente declarada obsoleta ha sido eliminada. Los usos deben actualizarse para usar la anotación@Native.
dart:html
#
- En lugar de utilizar
HttpRequestdirectamente, ahora se recomienda utilizarpackage:http.
dart:io
#
- En lugar de utilizar
HttpClientdirectamente, ahora se recomienda utilizarpackage:http.
dart:js_interop
#
- Experimental Los tipos JS como
JSAnytienen nuevos tipos de representación específicos del compilador. - Experimental Las clases
@staticInteropdefinidas por el usuario ya no pueden implementarJSAnyoJSObject. Los usos deben migrarse aJSObject.fromInteropObjecto definirse como tipos de extensión (extension types). - Experimental
JSArrayyJSPromiseahora tienen parámetros genéricos. - Experimental Varios miembros de extensión fueron movidos o renombrados.
Para conocer las extensiones actualizadas, consulta
JSAnyUtilityExtensionyJSAnyOperatorExtension.
dart:typed_data
#
- Las clases de vista no modificables para datos tipados se
declararán obsoletas en Dart 3.4.
En lugar de utilizar los constructores de estas clases, utiliza los
nuevos métodos
asUnmodifiableViewen las listas de datos tipados.
dart:nativewrappers
#
- Experimental Todas las clases de envoltura nativas ahora están marcadas como
basepara que ninguno de sus subtipos pueda ser implementado.
Herramientas
#Compilador de producción JavaScript (dart2js)
#- La
Invocationque se pasa anoSuchMethodya no tiene unmemberNameminificado, incluso cuando se compila con--minify.
Compilador Wasm (dart2wasm)
#- Experimental No permitir importar bibliotecas heredadas de interoperabilidad JS.
En su lugar, prefiere usar
dart:js_interopydart:js_interop_unsafe.
Analizador
#-
Experimental Las directivas de comentarios de
dart docque no sean válidas ahora son reportadas por el analyzer. -
Debido a las mejoras en la promoción de tipos, los siguientes diagnósticos del analyzer podrían activarse en el código existente que antes superaba el análisis:
unnecessary_non_null_assertionunnecessary_castinvalid_null_aware_operator
Linter
#-
Se eliminaron las reglas de linter
iterable_contains_unrelated_typeylist_remove_unrelated_type. Considera migrar a la regla expandidacollection_methods_unrelated_type. -
Las siguientes reglas de linter se eliminan porque ya no son necesarias con sound null safety. Debes eliminar su configuración de tus archivos
analysis_options.yamly cualquier comentario de ignore.always_require_non_null_named_parametersavoid_returning_nullavoid_returning_null_for_future
3.2.0
#Lenguaje
#- Versionados por lenguaje Se cambió el punto de división para los patrones refutables al patrón de nivel superior para que la promoción de tipos en las declaraciones if-case sea consistente independientemente de si el valor examinado (scrutinee) podría lanzar una excepción.
Bibliotecas
#dart:cli
#
-
Experimental Obsoleto
La función
waitFor.
dart:convert
#
- Se cambiaron los tipos de retorno de
utf8.encode()yUtf8Codec.encode()deList<int>aUint8List.
dart:developer
#
- Obsoleto El método
Service.getIsolateID.
dart:ffi
#
- Se cambió
NativeCallable.nativeFunctionpara que las llamadas ahora lancen un error si el receptor ya está cerrado, en lugar de devolvernullptr.
dart:io
#
- Se eliminaron los espacios en blanco al final de las cabeceras HTTP.
- Se insertó un espacio en el punto de plegado de los valores de cabecera plegados
que devuelven
HttpClientResponse.headersyHttpRequest.headers.
dart:js_interop
#
- Experimental Eliminado
JSNumber.toDarta favor detoDartDoubleytoDartInt. - Experimental Eliminado
Object.toJSa favor deObject.toJSBox. - Experimental Se restringieron las API externas de interoperabilidad JS usando
dart:js_interopa un conjunto de tipos permitidos. - Experimental Se prohibió el uso de
isNulleisUndefineden dart2wasm. - Experimental Se cambiaron las API
typeofEqualseinstanceofpara que ambas devuelvan bool en lugar deJSBoolean. Además,typeofEqualsahora tomaStringen lugar deJSString. - Experimental Se cambiaron los tipos
JSAnyyJSObjectpara que solo sean implementables, no heredables, por los tipos@staticInteropdel usuario. - Experimental Se cambió
JSArray.withLengthpara que tomeinten lugar deJSNumber.
Herramientas
#Compilador de desarrollo JavaScript (DDC)
#- Se agregaron interceptores para los tipos
SymbolyBigIntde JavaScript; ya no deberían usarse con clases depackage:js.
Compilador de producción JavaScript (dart2js)
#- Se agregaron interceptores para los tipos
SymbolyBigIntde JavaScript; ya no deberían usarse con clases depackage:js.
Analizador
#-
Versionados por lenguaje La promoción de campos privados finales podría hacer que se activen las siguientes advertencias del analyzer en el código existente que antes superaba el análisis:
dartclass C { final num? _x = null; void test() { if (_x != null) { print(_x! * 2); // unnecessary_non_null_assertion print(_x?.abs()); // invalid_null_aware_operator } if (_x is int) { print((_x as int).bitLength); // unnecessary_cast } } }
3.1.0
#Bibliotecas
#dart:async
#
- Se añadió el modificador
interfacea clases puramente abstractas:MultiStreamController,StreamConsumer,StreamIteratoryStreamTransformer.
dart:io
#
-
Se añadió
sameSitea la claseCookie, y se añadió la claseSameSite. FileSystemEventestá sellada (sealed). Esto significa queFileSystemEventno se puede extender ni implementar.
dart:js_interop
#
- Experimental Eliminado
ObjectLiteral; crea un literal de objeto sin miembros con nombre usando{}.jsify().
package:js
#
- Los miembros
external@staticInteropy los miembros de extensiónexternalya no se pueden usar como tear-offs. Declara una clausura (closure) o un método que no seaexternalque llame a estos miembros, y usa eso en su lugar. - Los miembros
external@staticInteropy los miembros de extensiónexternalgenerarán un código JS ligeramente diferente para los métodos que tienen parámetros opcionales.
3.0.0
#Lenguaje
#-
Versionados por lenguaje Se cambió la interpretación de los casos de switch (switch cases) de expresiones constantes a patrones.
-
Versionados por lenguaje Las declaraciones de clase de bibliotecas que se han actualizado a Dart 3.0 ya no se pueden utilizar como mixins de forma predeterminada.
-
Dart informa un error en tiempo de compilación si una instrucción
continueapunta a una etiqueta (label) que no es un bucle (instruccionesfor,doywhile) o un miembro de unswitch.
Bibliotecas
#- Las siguientes clases existentes se han convertido en clases mixin:
Iterable,IterableMixin,IterableBase,ListMixin,SetMixin,MapMixin,LinkedListEntry,StringConversionSink.
dart:core
#
- Obsoleto APIs obsoletas.
dart:async
#
- Eliminado Se eliminó la clase obsoleta
DeferredLibrary.
dart:collection
#
- Con versión de lenguaje Cambios en las bibliotecas de la plataforma.
dart:developer
#
- Eliminado Se eliminó la constante obsoleta
MAX_USER_TAGS. UtilizamaxUserTagsen su lugar. - Eliminado Se eliminaron las clases obsoletas
Metrics,Metric,Counter, yGaugeya que no funcionaban desde Dart 2.0.
dart:ffi
#
- Experimental Obsoleto
La anotación
@FfiNativeahora está obsoleta. Los usos deben actualizarse para usar la anotación@Native.
dart:html
#
- Eliminado Se eliminaron los métodos obsoletos
registerElementyregisterElement2enDocumentyHtmlDocument.
dart:math
#
- Versionados por lenguaje La interfaz
Randomsolo se puede implementar, no extender.
dart:io
#
- Se actualizó
NetworkProfilingpara acomodar los nuevosStringids que se introducen en vm_service:11.0.0
2.19.0
#Lenguaje
#- Se marcó código adicional como inalcanzable debido a los tipos
NullyNever. -
No delegar nombres privados inaccesibles a
noSuchMethod. - Informar un error en tiempo de compilación para todas las dependencias cíclicas durante la inferencia de tipos de nivel superior.
Bibliotecas
#dart:convert
#
- Eliminado La API anteriormente declarada obsoleta
[
DEFAULT_BUFFER_SIZE] enJsonUtf8Encoderha sido eliminada.
dart:developer
#
- Eliminado Se eliminaron las API anteriormente declaradas obsoletas
kInvalidParams,kExtensionError,kExtensionErrorMax, ykExtensionErrorMinenServiceExtensionResponse.
dart:ffi
#
- Se cambió el argumento de tipo en tiempo de ejecución de
PointeraNeveren preparación para eliminar por completo el argumento de tipo en tiempo de ejecución. Se cambióPointer.toStringpara que no informe ningún argumento de tipo.
dart:io
#
- No permitir cabeceras content-length negativas o hexadecimales.
File.createahora toma un nuevo parámetro opcionalexclusivede tipobool, y cuando estruela operación fallará si el archivo de destino ya existe.- Llamar a
ResourceHandle.toFile(),ResourceHandle.toSocket(),ResourceHandle.toRawSocket()oResourceHandle.toRawDatagramSocket(), más de una vez ahora lanza unStateError.
dart:isolate
#
- Se revirtió
SendPort.senda las comprobaciones estrictas sobre el contenido de los mensajes al enviar mensajes entre isolates que no se sabe si comparten el mismo código.
dart:mirrors
#
- Eliminado Se eliminaron las API
MirrorsUsedyComment.
package:js
#
-
Breaking changes to the preview feature
@staticInterop:- No se permite que las clases con esta anotación utilicen constructores
generativos
external. Consulta 48730 y 49941 para más detalles. - No se permite que los miembros de extensión externos de las clases con esta anotación utilicen parámetros de tipo.
- Las clases con esta anotación también deben tener la anotación
@JS. - Las clases con esta anotación no pueden ser implementadas por clases sin esta anotación.
- No se permite que las clases con esta anotación utilicen constructores
generativos
dart2js
#
2.18.0
#Lenguaje
#Bibliotecas
#dart:io
#
-
Se cambió la propiedad
urideRedirectExceptionendart:iopara que sea nulable. -
Se eliminaron las constantes en las API de red de
dart:ioque seguían la convenciónSCREAMING_CAPS. - La Dart VM ya no restaura automáticamente la configuración inicial de la terminal al salir.
Herramientas
#Línea de comandos de Dart
#-
Se eliminaron las herramientas independientes
dart2jsydartdevc. -
Se eliminó la herramienta independiente
dartanalyzer.
2.17.0
#Bibliotecas
#dart:io
#
-
Se añadió la nueva propiedad
connectionFactoryaHttpClient. - Se añadió la nueva propiedad
keyLogaHttpClient, que permite registrar claves TLS con fines de depuración. -
Se eliminaron constantes en
dart:iosiguiendoSCREAMING_CAPS - Se añadió una nueva propiedad
allowLegacyUnsafeRenegotiationaSecurityContext, que permite la renegociación de TLS para sockets seguros de cliente.
Herramientas
#Línea de comandos de Dart
#-
Obsoleto Se declaró obsoleta la herramienta independiente
dart2js. -
Obsoleto Se declaró obsoleta la herramienta independiente
dartdevc. -
Eliminado Se eliminó la herramienta independiente
dartdoc.
2.16.0
#Bibliotecas
#dart:io
#
- En Windows,
Directory.renameya no eliminará un directorio sinewPathespecifica uno. En su lugar, se lanzará unaFileSystemException. -
Eliminado Se eliminó la API
Platform.packageRoot.
dart:isolate
#
-
Eliminado Se eliminó la API
Isolate.packageRoot.
Herramientas
#Línea de comandos de Dart
#-
Obsoleto Se declaró obsoleta la herramienta independiente
dartanalyzer. -
Obsoleto Se declaró obsoleta la herramienta independiente
dartdoc. -
Eliminado Se eliminó la herramienta independiente
pubque estaba obsoleta.
2.15.0
#Bibliotecas
#dart:io
#
- Se actualizó la clase
SecurityContextpara establecer la versión mínima del protocolo TLS en TLS1_2_VERSION (1.2) en lugar de TLS1_VERSION.
dart:web_sql
#
dart:html
#
- Se eliminó
window.openDatabase(relacionado con la eliminación dedart:web_sqlanterior).
Herramientas
#Línea de comandos de Dart
#-
Se eliminó la herramienta independiente
dart2native. - Se eliminó la herramienta independiente
dartfmt.
Dart VM
#-
Se eliminó el soporte para extensiones nativas estilo
dart-ext: - Se agruparon los isolates generados a través de la API
Isolate.spawn()para que operen en el mismo montón (heap) administrado y, por lo tanto, compartan varias estructuras de datos internas de la VM.
2.14.0
#Bibliotecas
#dart:io
#
- Los callbacks de configuración (setter)
.authenticatey.authenticateProxyenHttpClientahora deben aceptar un argumentorealmnulable (para código con null safety migrado previamente).
dart:typed_data
#
- La mayoría de los tipos expuestos por esta biblioteca ya no se pueden extender, implementar ni mezclar (mixed-in).
Herramientas
#Dart VM
#- Los Expandos, y los parámetros
objectdeDart_NewWeakPersistentHandleyDart_NewFinalizableHandle, ya no aceptanPointerni subtipos deStruct
Línea de comandos de Dart
#-
Se obsoletó la herramienta independiente
dart2native - Se obsoletó la herramienta independiente
dartfmt.
dart2js
#
dart2jsya no es compatible con navegadores heredados (legacy), porque emite JavaScript ES6+ de forma predeterminada.
Dart Dev Compiler (DDC)
#- Se cambiaron las relaciones de subtipado de las clases de
package:jspara que sean más correctas y consistentes con Dart2JS.
2.13.0
#Bibliotecas
#package:js
#
- Ya no es válido utilizar un
Stringque coincida con una anotación@Nativeen una anotación@JS()para una clase de interoperabilidad JS no anónima.
2.12.0
#Lenguaje
#- Null Safety ahora está habilitado de forma predeterminada en todo el código que no ha optado por excluirse.
- Se corrigió un error de implementación donde
thisa veces experimentaba una promoción de tipo en las extensiones.
Bibliotecas
#dart:ffi
#
- Se declararon obsoletas las invocaciones con un tipo genérico
TdesizeOf<T>,Pointer<T>.elementAt(),Pointer<T extends Struct>.ref, yPointer<T extends Struct>[] - Se declaró obsoleto
allocateenpackage:ffi, ya que no podrá invocarsizeOf<T>de forma genérica. -
Subtipos obsoletos de
Structsin ningún miembro nativo.
Herramientas
#Dart VM
#Dart_WeakPersistentHandleya no se auto-elimina cuando el objeto referenciado es recolectado por el recolector de basura para evitar condiciones de carrera.- Se renombró
Dart_WeakPersistentHandleFinalizeraDart_HandleFinalizery se eliminó su argumentohandle.
Pub
#2.10.0
#Herramientas
#Dart VM
#- Se renombró
dart_api_dl.ccadart_api_dl.cy se cambió a un archivo C puro.
2.9.0
#Bibliotecas
#dart:convert
#
- Al codificar una cadena que contiene sustitutos no emparejados (unpaired surrogates) como UTF-8, los sustitutos no
emparejados se codificarán como caracteres de reemplazo (
U+FFFD). - Al decodificar UTF-8, los sustitutos codificados se tratarán como una entrada con formato incorrecto.
- Se cambió el número de caracteres de reemplazo emitidos
para secuencias de entrada con formato
incorrecto para que coincida con el estándar de codificación WHATWG al decodificar UTF-8
con
allowMalformed: true.
dart:html
#
CssClassSet.add()yCssClassSet.toggleahora devuelvenfalseen lugar denullsi elCssClassSetcorresponde a múltiples elementos.
dart:mirrors
#
- Los compiladores web (dart2js y DDC) ahora producen un error en tiempo de compilación
si
dart:mirrorses importado.
Herramientas
#Dart VM
#- Al imprimir una cadena usando la función
print, la implementación predeterminada imprimirá cualquier sustituto no emparejado en la cadena como caracteres de reemplazo (U+FFFD). - La función
Dart_StringToUTF8en la API de Dart convertirá los sustitutos no emparejados en caracteres de reemplazo.
2.8.1
#Lenguaje
#- Se corrigió un error de implementación donde la inferencia de variables locales utilizaba incorrectamente el tipo promovido de una variable de tipo.
- Se corrigió un error de implementación en torno a las cláusulas
implements Function,extends Function, owith Functionque ya no tienen efecto desde Dart 2.0.0.
Bibliotecas
#dart:async
#
-
Se cambió el tipo de retorno de
StreamSubscription.cancel()aFuture<void>. - Se dividió la función
runZoned()en dos funciones:runZoned()yrunZonedGuarded(), donde esta última tiene un parámetroonErrorrequerido, y la primera no tiene ninguno. - Los errores pasados a
Completer.completeError(),Stream.addError(),Future.error(), etc. ya no pueden sernull. - Se hicieron las trazas de pila (stack traces) no nulas.
dart:core
#
- Tres miembros en
RuneIteratorya no devuelvennullcuando se accede antes de la primera llamada amoveNext(). - El valor predeterminado de
defaultValueparaString.fromEnvironment()ahora es una cadena vacía en lugar denull. - El valor predeterminado para el parámetro
defaultValuedeint.fromEnvironment()ahora es cero.
dart:ffi
#
- Se cambiaron
Pointer.asFunction()yDynamicLibrary.lookupFunction()a métodos de extensión.
dart:io
#
- Se cambió la firma de los métodos de
HttpHeadersadd()yset. - La clase
Socketahora lanza unaSocketExceptionsi el socket ha sido destruido explícitamente o actualizado a un socket seguro al establecer u obtener opciones de socket. - La clase
Processahora lanza unStateErrorsi el proceso está desvinculado (ProcessStartMode.detachedyProcessStartMode.detachedWithStdio) al acceder al getterexitCode. - La clase
Processahora también lanza una excepción cuando no está conectada a la stdio del proceso hijo (ProcessStartMode.detachedyProcessStartMode.inheritStdio) al acceder a los gettersstdin,stdoutystderr. - El objeto ficticio (dummy) devuelto si fallan
FileStat.stat()oFileStat.statSync()ahora contiene marcas de tiempo de la época de Unix en lugar denullpara los gettersaccessed,changedymodified. - La clase
HeaderValueahora analiza de forma más estricta en dos casos límite no válidos.
Herramientas
#Dart Dev Compiler (DDC)
#Corregimos varias inconsistencias entre DDC y Dart2JS para que los usuarios encuentren con menos frecuencia código que es aceptado por un compilador pero que luego falla en el otro.
- Se eliminó la versión heredada (basada en el analyzer) de DDC.
- Las funciones pasadas a JavaScript utilizando la especificación de interoperabilidad recomendada de
package:jsahora deben envolverse con una llamada aallowInterop. - Los constructores en clases
@JS()deben estar marcados conexternal.
dart2js
#
- Los límites (bounds) de los parámetros de tipo correspondientes ahora solo necesitan ser subtipos mutuos en lugar de ser estructuralmente iguales salvo por el renombrado de variables de tipo vinculadas e igualar todos los tipos top.
- Los tipos ahora están normalizados.
- Los constructores en clases
@JS()deben estar marcados conexternal. - Se eliminó por completo la bandera
--package-root, que estaba oculta y deshabilitada en Dart 2.0.0.
2.7.1
#2.7.0
#Lenguaje
#Bibliotecas
#dart:io
#
- Se añadió
IOOverrides.serverSocketBindpara ayudar a escribir pruebas que deseen simularServerSocket.bind.
2.6.0
#Lenguaje
#- Se cambió la inferencia al usar valores
Nullen un contextoFutureOr. Es decir, las restricciones de formas similares aNull<:FutureOr<T>ahora producenNullcomo solución paraT.
Bibliotecas
#dart:ffi
#
- La API ahora hace uso de miembros de extensión estáticos.
- Se eliminó la gestión de memoria
Pointer.allocateyPointer.free. Pointer.offsetByfue eliminado, usacastyelementAten su lugar.
2.5.0
#Bibliotecas
#- Varios métodos y propiedades de diversas bibliotecas principales, que antes
declaraban un tipo de retorno de
List<int>, se actualizaron para declarar un tipo de retorno deUint8List.
dart:io
#
- Los parámetros posicionales opcionales
nameyvaluedel constructor de la claseCookieahora son obligatorios. - Los setters
nameyvaluede la claseCookieahora validan que las cadenas estén formadas por el conjunto de caracteres permitido y no sean nulas.
Herramientas
#Pub
#- Los paquetes publicados en pub.dev ya no pueden contener dependencias de git.
2.4.0
#Lenguaje
#Bibliotecas
#dart:isolate
#
Isolate.resolvePackageUrisiempre lanzará unUnsupportedErrorcuando se compile con dart2js o DDC.
dart:async
#
- Se corrigió un error en la clase
StreamIteratordondeawait forpermitíanullcomo stream.
2.2.0
#Bibliotecas
#package:kernel
#
- El getter
klassen la claseInstanceConstanten la API Kernel AST ha sido renombrado aclassNodepara mayor consistencia. - Se actualizó la implementación de
Linkpara utilizar enlaces simbólicos reales en lugar de uniones (junctions) en Windows.
2.1.1
#Bibliotecas
#dart:io
#
Herramientas
#Dart VM
#- Se corrigió una brecha de seguridad (soundness hole) al usar
dart:mirrorspara invocar de forma reflexiva un método de una manera incorrecta que infringe sus tipos estáticos.
2.1.0
#Lenguaje
#-
A number of static errors that should have been detected
and reported were not supported in 2.0.0. These are reported now, which means
existing incorrect code might show new errors:
- Los mixins deben sobrescribir correctamente sus superclases.
- Los argumentos de tipo implícitos en las cláusulas extends deben cumplir con los límites (bounds) de la clase.
- Los miembros de instancia deben sombrear prefijos.
- Las invocaciones de constructores deben usar una sintaxis válida, incluso con el uso opcional de
new. - Los argumentos de tipo para los typedefs genéricos deben cumplir con sus límites (bounds).
- Las clases no pueden implementar FutureOr.
- Los métodos abstractos no pueden sobrescribir de forma insegura un método concreto.
- Los constructores constantes no pueden redirigir a constructores no constantes.
- No se permiten setters con el mismo nombre que la clase que los contiene.
Herramientas
#dart2js
#
- No se permiten claves duplicadas en un mapa const y producen un error en tiempo de compilación.
2.0.0
#Lenguaje
#- Se reemplazó el sistema de tipos estático opcional no seguro por un sistema de tipos estático seguro (sound) que utiliza inferencia de tipos y comprobaciones en tiempo de ejecución, anteriormente llamado strong mode.
- Las funciones marcadas como
asyncahora se ejecutan sincrónicamente hasta la primera instrucciónawait.
Bibliotecas
#- Se renombraron las constantes en las bibliotecas principales de
SCREAMING_CAPSalowerCamelCase. - Se añadieron muchos métodos nuevos a las clases de las bibliotecas principales que deberán implementarse si implementas las interfaces de estas clases.
dart:isolateydart:mirrorsya no son compatibles al usar Dart para la web.
Herramientas
#Pub
#- Se reemplazó el sistema de construcción de pub basado en transformadores por un nuevo sistema de construcción.
A menos que se indique lo contrario, la documentación en este sitio refleja Dart 3.12.2. Página actualizada por última vez el 19-05-2026. Ver fuente oreportar un problema.