Mudanças incompatíveis e descontinuações
Uma lista de mudanças incompatíveis por versão do Dart.
Esta página lista todas as mudanças incompatíveis e descontinuações em atualizações do SDK do Dart, organizadas por versão e área, para ajudar os desenvolvedores Dart a entender e gerenciar o impacto delas. As notas de versão completas estão disponíveis no changelog do SDK do Dart. O documento política de mudanças incompatíveis descreve a política e o processo relacionados a mudanças incompatíveis e descontinuações no Dart.
Esta página inclui os seguintes tipos de mudanças incompatíveis:
- Sem versionamento
-
O SDK do Dart não mantém compatibilidade com versões anteriores, e o código pode quebrar assim que você atualizar a versão do seu SDK se ele depender do comportamento anterior.
Estas são a maioria das mudanças e não são marcadas de forma especial nesta lista.
- Versionado por idioma
-
O SDK do Dart mantém a compatibilidade com versões anteriores para o código existente, e a mudança de comportamento só tem efeito (podendo quebrar código que depende do comportamento anterior) quando você atualiza a versão da linguagem do seu código.
Estas são marcadas como: Language versioned
- Descontinuações
-
O SDK do Dart mantém a compatibilidade com código descontinuado, emitindo um aviso. As descontinuações são então removidas por completo em uma versão posterior, quebrando qualquer código que dependa do comportamento anterior.
Estas são marcadas como: Deprecated / Removed
- Experimental
-
Parte da versão, mas ainda não tratada como estável no SDK, e pode quebrar de uma versão para outra. Mudanças experimentais nem sempre têm uma issue de mudança incompatível correspondente, mas podem ter mais detalhes no changelog do SDK.
Estas são marcadas como: Experimental
Se você tiver dúvidas ou preocupações sobre qualquer uma dessas mudanças incompatíveis, comente na issue de mudança incompatível vinculada à entrada relevante. Para ser notificado sobre futuras mudanças incompatíveis, entre no grupo Dart announce.
3.13.0
#Linguagem
#-
Language versioned
Você não pode mais usar
finalouvarem parâmetros que não são declarações. O Dart agora reserva ambos para declarar parâmetros em construtores primários. Removafinalouvardas declarações de parâmetros afetadas. Se você ainda quiser impedir a reatribuição de parâmetros, pode usar a regra de lintparameter_assignments. - A inferência de tipo promovido em funções geradoras internas foi ajustada.
Bibliotecas
#dart:io
#
-
NetworkInterface.addressesagora retornaList<InterfaceAddress>em vez deList<InternetAddress>. O novo subtipoInterfaceAddressdeInternetAddressexpõe um campoprefixLengthe um getterbroadcast. Código que implementaNetworkInterfacee sobrescreveaddressesdeve atualizar o tipo de retorno. -
InternetAddress.lookupnão aceita mais endereços IPv4 inválidos que são tradicionalmente aceitos porinet_aton.
dart:js_interop
#
-
JSFunctioneJSExportedDartFunctionagora são genéricos.JSExportedDartFunction<T>.toDartagora converte a função original encapsulada para o argumento de tipoT, eisA<JSExportedDartFunction<T>>agora também verifica se a função encapsulada é umT. Os tipos em runtime deJSFunctioneJSExportedDartFunctionnão mudam.
Ferramentas
#Analisador
#-
Deprecated A regra de lint
avoid_private_typedef_functionsestá descontinuada e deve ser removida dos arquivosanalysis_options.yaml. -
Deprecated A regra de lint
one_member_abstractsestá descontinuada e deve ser removida dos arquivosanalysis_options.yaml.
Formatador (dart format)
#
-
Deixou de adicionar uma linha em branco antes de um comentário no fim de uma unidade de compilação ou de um corpo com chaves.
-
As cláusulas de representação de extension types agora são formatadas da mesma forma que as listas de parâmetros formais de construtores primários.
-
Quando as vírgulas finais são preservadas, não insere mais uma quebra de linha antes do
;em um enum com membros, a menos que haja uma vírgula final. -
Corrigido um bug em que algumas coleções ou argumentos podiam ser divididos desnecessariamente.
-
Language versioned Listas de parâmetros agora podem ser formatadas em bloco.
-
Language versioned Expressões
as,iseis!agora podem ser formatadas em bloco. -
Language versioned Linhas em branco são adicionadas ao redor de declarações
mixineextension typese elas não tiverem um corpo com;. -
Language versioned Os imports agora são separados em seções.
-
Language versioned Vírgulas finais agora são adicionadas para dividir as cláusulas de representação de extension types.
Runtime
#-
Removed
Os certificados raiz de fallback embutidos, usados quando
os certificados do sistema não podem ser encontrados, não são mais incluídos.
Se os certificados do sistema não forem encontrados,
use as opções
--root-certs-fileou--root-certs-cachepara fornecer certificados de fallback à VM standalone do Dart.
API do Embedder
#-
Dart_FileModifiedCallbackemruntime/include/dart_tools_api.hagora passaint64_t sincecomo microssegundos desde a época, em vez de milissegundos.
3.12.0
#Bibliotecas
#dart:js_interop
#
-
O método de extensão
isAfoi movido deJSAnyUtilityExtensionparaNullableObjectUtilExtensionpara dar suporte à verificação de tipo de qualquerObject?. Essa mudança só é incompatível se você referenciou o nome da extensão diretamente, seja aplicando a extensão diretamente ou por meio das diretivasshow/hide. -
isA<JSObject>()agora trata corretamente objetos JS sem protótipos, eisA<JSAny>()faz uma verificação não trivial de que o valor é um valor JS. -
isA<JSExportedDartFunction>()agora verifica se a função é realmente uma função wrapper JS retornada porFunction.toJSouFunction.toJSCaptureThis.
Ferramentas
#Pub
#-
dart pub cache repairagora repara, por padrão, apenas os pacotes referenciados pelo arquivopubspec.lockdo projeto atual. Para reparar todos os pacotes do cache do pub, como nas versões anteriores, passe a nova flag--all.
Compilador Wasm (dart2wasm)
#-
A API de carregamento de módulos com carregamento deferido foi atualizada para permitir
o download em lote de módulos deferidos.
O embedder agora usa
loadDeferredModulesem vez deloadDeferredModule, em que a nova função deve receber um array de nomes de módulos em vez de nomes individuais. Todas as funções de carregamento de módulos também devem aceitar agora um callbackinstantiatorao qual devem passar os resultados carregados.
Compilador JavaScript de produção (dart2js)
#-
JSExportedDartFunction.toDartagora lança exceção se a função JS wrapper não for resultado deFunction.toJSouFunction.toJSCaptureThis, para ser consistente com DDC e dart2wasm. Antes, às vezes ela retornava incorretamente a função Dart original, mesmo se a função JS wrapper tivesse sido convertida de uma chamada à função descontinuadaallowInterop.
3.11.0
#Ferramentas
#Analisador
#-
Deprecated A regra de lint
avoid_null_checks_in_equality_operatorsestá descontinuada e deve ser removida dos arquivosanalysis_options.yaml. -
Deprecated A regra de lint
prefer_final_parametersestá descontinuada e deve ser removida dos arquivosanalysis_options.yaml. -
Deprecated A regra de lint
use_if_null_to_convert_nulls_to_boolsestá descontinuada e deve ser removida dos arquivosanalysis_options.yaml.
Compilação Wasm (dart compile wasm)
#
-
Removed Código que importa
dart:js_utiloupackage:jsagora resulta em erro de compilação ao compilar para WebAssembly.Invocar qualquer API dessas bibliotecas resultará em erro de runtime. Os usos devem ser migrados para
dart:js_interopedart:js_interop_unsafe.
3.10.0
#Linguagem
#-
Funções geradoras
sync*easync*sem um retorno especificado agora inferem corretamente os tipos de retorno como non-nullable quando nenhum valornullé produzido. Isso pode disparar novos diagnósticos relacionados a elementos de código desnecessários, como um operador de acesso com null-aware desnecessário (?.).
Bibliotecas
#dart:core
#
-
As funções
Uri.parseIPv4AddresseUri.parseIPv6Addressnão permitem mais incorretamente zeros à esquerda em endereços IPv4. -
Deprecated A possibilidade de implementar
RegExpeRegExpMatchestá descontinuada e será removida em uma versão futura.
dart:io
#
-
IOOverridesnão pode mais ser implementado, mas ainda pode ser estendido.
dart:js_interop
#
-
A extensão
Uint16ListToJSInt16Arrayfoi renomeada paraUint16ListToJSUint16Array. -
A extensão
JSUint16ArrayToInt16Listfoi renomeada paraJSUint16ArrayToUint16List. -
A função
Function.toJSCaptureThisagora resulta em verificações adicionais em tempo de compilação para igualarFunction.toJS. Se a função não tiver um tipo conhecido estaticamente, tiver tipos não suportados na assinatura, incluir parâmetros de tipo ou tiver quaisquer parâmetros nomeados, a chamada resultará em erro de compilação.
Ferramentas
#SDK
#-
A CLI
darte a VM do Dart agora são executáveis separados, com o executável e o processo da VM do Dart puro chamadosdartvm. Programas Dart ainda devem ser executados comdart run. -
Os subcomandos da ferramenta
dart, comodart formatedart compile, agora executam snapshots compilados com AOT das ferramentas subjacentes. Não deve haver diferença funcional além de melhorias de desempenho, mas se você encontrar incompatibilidades, por favor reporte-as. -
Removed A ferramenta
dartnão está mais disponível para plataformas IA32, pois o SDK do Dart não oferece mais suporte a IA32.
Analisador
#-
Usar membros marcados como
@experimentalfora do pacote em que são declarados agora resulta em um aviso. -
Regras de lint habilitadas em arquivos de opções de análise incluídos agora resultam em diagnósticos de lint incompatíveis quando apropriado.
-
Removed A anotação
@requireddescontinuada depackage:metanão é mais suportada. Para marcar um parâmetro como obrigatório, use a palavra-chaverequired.
Compilação Wasm (dart compile wasm)
#
-
dart:js_utilepackage:jsnão são mais suportados ao compilar para WebAssembly. Invocar qualquer API dessas bibliotecas resultará em erro de runtime. Os usos devem ser migrados paradart:js_interopedart:js_interop_unsafe. -
Para igualar os compiladores JS,
dartifyquando compilado para Wasm agora converte objetos JSPromiseem objetos DartFutureem vez de objetos DartJSValue.
3.9.0
#Linguagem
#- Language versioned Null safety agora é assumido ao calcular a promoção de tipo, a alcançabilidade e a atribuição definida. Como resultado, a análise aprimorada de código morto pode fazer com que novos diagnósticos do analisador sejam disparados em código existente que antes passava na análise.
Ferramentas
#-
Alguns subcomandos da ferramenta
dart, comodart analyzeedart fix, agora executam snapshots compilados com AOT das ferramentas subjacentes. Não deve haver diferença funcional além de melhorias de desempenho, mas se você encontrar incompatibilidades, por favor reporte-as.
Pub
#-
Language versioned
O limite superior da restrição do SDK
flutterno pacote raiz do seu workspace agora é respeitado. Se o seu SDK atual não atender ao limite especificado,dart pub gete outras ações que recuperam dependências falharão.
Build do Dart
#-
Experimental
Gerar um bundle de aplicação CLI com suporte experimental a native assets agora
exige o uso do subcomando
dart build clie a especificação do entrypoint da aplicação com a nova opção--target.
3.8.0
#Bibliotecas
#dart:html
#
-
Removed
O construtor
Element.createdfoi removido. -
Classes nativas em
dart:html, comoHtmlElement, não podem mais ser estendidas.
Ferramentas
#Analisador
#-
Deprecated
A regra de lint
avoid_null_checks_in_equality_operatorsestá descontinuada e deve ser removida dos arquivosanalysis_options.yaml.
Compilador JavaScript de desenvolvimento (DDC)
#- Agora lança um erro de runtime quando um construtor factory de redirecionamento é destacado e um de seus parâmetros opcionais não nullable não recebe nenhum valor. No futuro, provavelmente isso será um erro de compilação.
Compilador JavaScript de produção (dart2js)
#-
Experimental Removed
As flags
--experiment-new-rtie--use-old-rtinão são mais suportadas.
Formatador (dart format)
#
- Language versioned O formatador fez mudanças e correções que resultam em nova saída ao formatar código com uma versão da linguagem 3.8 ou superior.
3.7.0
#Linguagem
#-
Language versioned Variáveis locais e parâmetros nomeados
_agora não são mais de vinculação e não podem mais ser usados ou acessados. -
A análise de alcançabilidade agora considera se um campo é
promovido para
Nullpor meio deisouas. Isso torna o sistema de tipos mais autoconsistente, pois espelha o comportamento de variáveis locais promovidas. Não se espera que essa mudança faça diferença na prática.
Bibliotecas
#
dart:html, dart:indexed:db, dart:svg, dart:web_audio,
dart:web_gl, dart:js
#
-
Deprecated Estas bibliotecas web legadas estão oficialmente descontinuadas.
Espera-se que sejam removidas em uma versão futura.
Os projetos devem migrar para usar
package:webedart:js_interop. Para saber mais, veja Migre parapackage:web.
dart:js, dart:js_util, package:js
#
-
Deprecated Estas bibliotecas legadas de interop com JS estão oficialmente descontinuadas.
Espera-se que sejam removidas em uma versão futura.
Os projetos devem migrar para usar
dart:js_interop. Para saber mais, veja uso de interop com JS.
Ferramentas
#Analisador
#-
Removed As regras de lint
package_api_docseunsafe_htmlforam removidas e devem ser retiradas dos arquivosanalysis_options.yaml.
Formatador (dart format)
#
- Language versioned O formatador implementa um novo estilo que resulta em nova saída ao formatar código com uma versão da linguagem 3.7 ou superior.
-
Removed A flag
--fixdodart formatnão é mais suportada. Para aplicar correções semelhantes e outras, configure suas opções de análise e executedart fix. -
Deprecated A opção
--line-lengthdodart formatfoi descontinuada e está marcada para remoção. Todos os usos devem ser migrados para a nova opção--page-width.
3.6.0
#Linguagem
#-
O contexto usado pelo Dart para realizar a inferência de tipo sobre
o operando de uma expressão throw foi alterado de
"tipo desconhecido" para
Object. Isso torna o sistema de tipos mais autoconsistente, pois reflete o fato de que não é legal lançarnull. Não se espera que essa mudança faça diferença na prática.
Bibliotecas
#dart:io
#
-
Removed O construtor
Platform()foi removido. Todas as instanciações dePlatformdevem ser removidas. -
HttpClientagora responde a um redirecionamento sem o header "Location" lançando umRedirectExceptionem vez de umStateError.
Ferramentas
#Analisador
#-
Deprecated As regras de lint
package_api_docseunsafe_htmlforam descontinuadas e estão marcadas para remoção no Dart 3.7.
Front end do compilador (cfe)
#- O compilador do Dart agora calcula os closures superior e inferior dos schemas de tipo logo antes de serem passados para o procedimento de teste de subtipo. Antes do Dart 3.6, o compilador os calculava no início das computações de limite superior e inferior. O analisador já seguia esse comportamento, então aplicações que já passam na análise dificilmente serão afetadas por essa mudança.
Compilador Wasm (dart2wasm)
#-
A condição
dart.library.jsagora éfalseem imports condicionais ao compilar para WebAssembly. Deve-se usar a condiçãodart.library.js_interopem vez dela.
Formatador (dart format)
#
As seguintes mudanças podem resultar em pequenas alterações de formatação
ao executar dart format com um SDK do Dart 3.6 ou posterior:
-
Preserva parâmetros de tipo em parâmetros formais de função tipada no estilo antigo que
também usam
this.ousuper.. - Formata corretamente imports com as cláusulas
aseif.
Pub
#-
dart pub publishagora avisa se arquivos rastreados no git têm alterações não commitadas.
3.5.0
#Linguagem
#-
O contexto usado pelo compilador para realizar a inferência de tipo sobre
o operando de uma expressão
awaitfoi alterado para igualar o comportamento do analisador. -
O contexto usado pelo compilador para realizar a inferência de tipo sobre
o lado direito de uma expressão "if-null" (
e1 ?? e2) foi alterado para igualar o comportamento do analisador. O comportamento antigo pode ser restaurado fornecendo tipos explícitos.
Bibliotecas
#dart:core
#
-
DateTimeagora armazena microssegundos na plataforma web, aproximando-se mais do comportamento nas plataformas nativas.
dart:io
#
dart:js_interop
#
-
importModuleagora aceita umJSAnyem vez de umaStringpara dar suporte a outros valores JS também, como objetosTrustedScriptURL. -
isTruthyenotagora retornamJSBooleanem vez deboolpara ser consistente com os outros métodos de operador JS. -
ExternalDartReferencenão implementa maisObject. Em vez disso, agora aceita um parâmetro de tipo (T) com limiteObject?para capturar o tipo do objeto Dart que é externalizado.
dart:typed_data
#
-
Removed
As classes de visão não modificável para dados tipados foram removidas.
Em vez de usar os construtores dessas classes, use
os novos métodos
asUnmodifiableViewnas listas de dados tipados.
Runtime
#-
Removed A VM do Dart não oferece mais suporte a null safety unsound.
- A opção de CLI
--no-sound-null-safetyfoi removida. - As funções
Dart_NewListOfeDart_IsLegacyTypeforam removidas da API C.
- A opção de CLI
-
Removed A função
Dart_DefaultCanonicalizeUrlfoi removida da API C.
3.4.0
#Linguagem
#-
O schema de contexto de tipo de padrão para padrões de cast
agora é
_(o tipo desconhecido) em vez deObject?. -
O schema de tipo usado pelos compiladores do Dart para
realizar a inferência de tipo sobre o operando de um operador spread com null-aware (
...?) em literais de map e set foi tornado nullable, para igualar o que já acontece em literais de lista.
Bibliotecas
#dart:cli
#
-
Experimental Removed
A função
waitForfoi removida.
dart:html, dart:indexed:db, dart:svg, dart:web_audio,
dart:web_gl
#
-
Deprecated Estas bibliotecas agora estão marcadas como legadas e
receberão menos suporte no futuro.
Novos projetos devem preferir usar
package:webedart:js_interop. Para saber mais, veja Migre parapackage:web.
dart:js
#
-
Deprecated
Esta biblioteca agora está marcada como legada e receberá menos suporte no futuro.
Os usos devem ser migrados para
dart:js_interopedart:js_interop_unsafe. Para saber mais, veja/go/next-gen-js-interop.
dart:js_util
#
-
Deprecated
Esta biblioteca agora está marcada como legada e receberá menos suporte no futuro.
Os usos devem ser migrados para
dart:js_interopedart:js_interop_unsafe. Para saber mais, veja/go/next-gen-js-interop.
dart:io
#
-
Stdouttem um novo campolineTerminator, que permite que desenvolvedores controlem o terminador de linha usado porstdoutestderr. Classes que implementamStdoutdevem definir o campolineTerminator. A semântica padrão destdoutestderrnão muda. -
Deprecated A propriedade
FileSystemDeleteEvent.isDirectory. Ela sempre retornafalse.
dart:typed_data
#
-
Deprecated
As classes de visão não modificável para dados tipados estão descontinuadas.
Em vez de usar os construtores dessas classes, use
os novos métodos
asUnmodifiableViewnas listas de dados tipados.
Ferramentas
#Compilador JavaScript de produção (dart2js)
#-
Experimental Deprecated
Agora você deve especificar um formato para
a opção de CLI
--dump-infocomobinaryoujson. O formatojsonestá descontinuado e pode ser removido em uma versão futura do Dart.
Compilador Wasm (dart2wasm)
#-
Experimental Vários argumentos de CLI de
dart compile wasmforam atualizados, removidos ou substituídos. Para saber mais, executedart compile wasm --verbose --help.
Runtime
#-
Removed A VM do Dart não oferece mais suporte a strings externas.
Como resultado, as funções
Dart_IsExternalString,Dart_NewExternalLatin1StringeDart_NewExternalUTF16Stringforam removidas da API C do Dart.
3.3.0
#SDK
#-
Experimental Removed Os seguintes experimentos estão agora aposentados, pois foram lançados no Dart 3 e não são mais necessários com uma versão da linguagem 3.0 ou superior. A configuração deles deve ser removida das opções de análise, dos comandos de CLI e das configurações da IDE.
patternsrecordsclass-modifierssealed-class
Linguagem
#Bibliotecas
#dart:cli
#
-
Experimental Deprecated
A função
waitForcontinua descontinuada por mais uma versão e está marcada para remoção no Dart 3.4.
dart:ffi
#
-
Deprecated Os métodos de aritmética de ponteiro
elementAtnos tiposPointerestão descontinuados. Migre para os operadores-e+. -
Experimental Removed
A anotação
@FfiNative, previamente descontinuada, foi removida. Os usos devem ser atualizados para usar a anotação@Native.
dart:html
#
-
Em vez de usar
HttpRequestdiretamente, agora é recomendado usarpackage:http.
dart:io
#
-
Em vez de usar
HttpClientdiretamente, agora é recomendado usarpackage:http.
dart:js_interop
#
-
Experimental Tipos JS como
JSAnytêm novos tipos de representação específicos do compilador. -
Experimental Classes
@staticInteropdefinidas pelo usuário não podem mais implementarJSAnyouJSObject. Os usos devem ser migrados paraJSObject.fromInteropObjectou ser definidos como extension types. -
Experimental
JSArrayeJSPromiseagora têm parâmetros genéricos. -
Experimental Vários membros de extensão foram movidos ou renomeados.
Para saber sobre as extensões atualizadas, consulte
JSAnyUtilityExtensioneJSAnyOperatorExtension.
dart:typed_data
#
-
As classes de visão não modificável para dados tipados serão
descontinuadas no Dart 3.4.
Em vez de usar os construtores dessas classes, use
os novos métodos
asUnmodifiableViewnas listas de dados tipados.
dart:nativewrappers
#
-
Experimental Todas as classes wrapper nativas agora são marcadas como
basepara que nenhum de seus subtipos possa ser implementado.
Ferramentas
#Compilador JavaScript de produção (dart2js)
#-
O
Invocationque é passado paranoSuchMethodnão tem mais ummemberNameminificado, mesmo quando compilado com--minify.
Compilador Wasm (dart2wasm)
#-
Experimental Proíbe importar bibliotecas legadas de interop com JS.
Prefira usar
dart:js_interopedart:js_interop_unsafe.
Analisador
#-
Experimental Diretivas inválidas em comentários
dart docagora são reportadas pelo analisador. -
Devido a melhorias na promoção de tipo, os seguintes diagnósticos do analisador podem ser disparados em código existente que antes passava na análise:
unnecessary_non_null_assertionunnecessary_castinvalid_null_aware_operator
Linter
#-
As regras
iterable_contains_unrelated_typeelist_remove_unrelated_typeforam removidas. Considere migrar para a regracollection_methods_unrelated_typeampliada. -
As seguintes regras foram removidas por não serem mais necessárias com o sound null safety. Você deve remover a configuração delas dos seus arquivos
analysis_options.yamle de quaisquer comentários de ignore.always_require_non_null_named_parametersavoid_returning_nullavoid_returning_null_for_future
3.2.0
#Linguagem
#- Language versioned Mudou o ponto de divisão para padrões refutáveis para o padrão de nível superior, de modo que a promoção de tipo em instruções if-case seja consistente independentemente de o valor avaliado poder lançar uma exceção.
Bibliotecas
#dart:cli
#
-
Experimental Deprecated
A função
waitFor.
dart:convert
#
-
Os tipos de retorno de
utf8.encode()eUtf8Codec.encode()foram alterados deList<int>paraUint8List.
dart:developer
#
- Deprecated O método
Service.getIsolateID.
dart:ffi
#
-
NativeCallable.nativeFunctionfoi alterado para que as chamadas agora lancem um erro se o receptor já estiver fechado, em vez de retornarnullptr.
dart:io
#
- Eliminou espaços em branco no final dos headers HTTP.
-
Inseriu um espaço no ponto de dobra de valores de header dobrados
que
HttpClientResponse.headerseHttpRequest.headersretornam.
dart:js_interop
#
-
Experimental Removed
JSNumber.toDartem favor detoDartDoubleetoDartInt. -
Experimental Removed
Object.toJSem favor deObject.toJSBox. -
Experimental APIs de interop externo com JS usando
dart:js_interopforam restritas a um conjunto de tipos permitidos. -
Experimental Uso de
isNulleisUndefinedno dart2wasm foi proibido. -
Experimental As APIs
typeofEqualseinstanceofforam alteradas para retornar bool em vez deJSBoolean. Além disso,typeofEqualsagora recebeStringem vez deJSString. -
Experimental Os tipos
JSAnyeJSObjectforam alterados para que só possam ser implementados, e não estendidos, por tipos@staticInteropdefinidos pelo usuário. -
Experimental
JSArray.withLengthfoi alterado para receberintem vez deJSNumber.
Ferramentas
#Compilador JavaScript de desenvolvimento (DDC)
#-
Foram adicionados interceptors para os tipos JavaScript
SymboleBigInt; eles não devem mais ser usados com classespackage:js.
Compilador JavaScript de produção (dart2js)
#-
Foram adicionados interceptors para os tipos JavaScript
SymboleBigInt; eles não devem mais ser usados com classespackage:js.
Analisador
#-
Language versioned A promoção de campos privados final pode fazer com que os seguintes avisos do analisador sejam disparados em código existente que antes passava na análise:
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
#
-
Adicionado o modificador
interfacea classes puramente abstratas:MultiStreamController,StreamConsumer,StreamIteratoreStreamTransformer.
dart:io
#
-
Adicionado
sameSiteà classeCookie, e adicionada a classeSameSite. -
FileSystemEventésealed. Isso significa queFileSystemEventnão pode ser estendido nem implementado.
dart:js_interop
#
-
Experimental Removed
ObjectLiteral; crie um literal de objeto sem membros nomeados usando{}.jsify().
package:js
#
-
Membros
external@staticInterope membros de extensãoexternalnão podem mais ser usados como tear-offs. Declare um closure ou um método nãoexternalque chame esses membros, e use-o no lugar. -
Membros
external@staticInterope membros de extensãoexternalvão gerar um código JS um pouco diferente para métodos que têm parâmetros opcionais.
3.0.0
#Linguagem
#-
Language versioned A interpretação de casos de switch foi alterada de expressões constantes para padrões.
-
Language versioned Declarações de classe de bibliotecas que foram atualizadas para o Dart 3.0 não podem mais ser usadas como mixins por padrão.
-
O Dart reporta um erro de compilação se uma instrução
continuetiver como alvo um label que não é um loop (instruçõesfor,doewhile) nem um membro deswitch.
Bibliotecas
#-
As seguintes classes existentes foram transformadas em classes mixin:
Iterable,IterableMixin,IterableBase,ListMixin,SetMixin,MapMixin,LinkedListEntry,StringConversionSink.
dart:core
#
- Deprecated APIs descontinuadas.
dart:async
#
dart:collection
#
- Language versioned Mudanças nas bibliotecas da plataforma.
dart:developer
#
-
Removed Removida a constante descontinuada
MAX_USER_TAGS. UsemaxUserTagsem vez dela. -
Removed Removidas as classes descontinuadas
Metrics,Metric,Counter, eGauge, pois estavam quebradas desde o Dart 2.0.
dart:ffi
#
-
Experimental Deprecated
A anotação
@FfiNativeagora está descontinuada. Os usos devem ser atualizados para usar a anotação@Native.
dart:html
#
-
Removed Removidos os métodos descontinuados
registerElementeregisterElement2emDocumenteHtmlDocument.
dart:math
#
-
Language versioned A interface
Randomsó pode ser implementada, não estendida.
dart:io
#
-
Atualizado
NetworkProfilingpara acomodar novos idsStringque são introduzidos no vm_service:11.0.0.
2.19.0
#Linguagem
#-
Marcado código adicional como inalcançável
devido aos tipos
NulleNever. -
Não delega nomes privados inacessíveis para
noSuchMethod. - Reporta um erro de compilação para todas as dependências cíclicas durante a inferência de tipo de nível superior.
Bibliotecas
#dart:convert
#
-
Removed A API previamente descontinuada
[
DEFAULT_BUFFER_SIZE] emJsonUtf8Encoderfoi removida.
dart:developer
#
-
Removed APIs previamente descontinuadas removidas
kInvalidParams,kExtensionError,kExtensionErrorMaxekExtensionErrorMinemServiceExtensionResponse.
dart:ffi
#
-
O tipo de argumento de runtime de
Pointerfoi alterado paraNeverem preparação para remover completamente o argumento de tipo de runtime.Pointer.toStringfoi alterado para não reportar nenhum argumento de tipo.
dart:io
#
- Não permite content-length headers negativos ou hexadecimais.
-
File.createagora recebe um novo parâmetroboolopcionalexclusive, e, quando étrue, a operação falha se o arquivo de destino já existir. -
Chamar
ResourceHandle.toFile(),ResourceHandle.toSocket(),ResourceHandle.toRawSocket()ouResourceHandle.toRawDatagramSocket()mais de uma vez agora lança umStateError.
dart:isolate
#
-
SendPort.sendvoltou a ter verificações estritas sobre o conteúdo das mensagens ao enviar mensagens entre isolates que não são conhecidos por compartilhar o mesmo código.
dart:mirrors
#
-
Removed APIs removidas
MirrorsUsedeComment.
package:js
#
-
Mudanças incompatíveis na funcionalidade de preview
@staticInterop:- Classes com essa anotação não podem mais usar construtores generativos
external. Veja 48730 e 49941 para mais detalhes. - Classes com membros de extensão
externaldessa anotação não podem mais usar parâmetros de tipo. - Classes com essa anotação também devem ter a anotação
@JS. - Classes com essa anotação não podem ser implementadas por classes sem essa anotação.
- Classes com essa anotação não podem mais usar construtores generativos
dart2js
#
2.18.0
#Linguagem
#Bibliotecas
#dart:io
#
-
Alterada a propriedade
urideRedirectExceptionemdart:iopara ser nullable. -
Removidas constantes nas APIs de rede de
dart:ioseguindo a convençãoSCREAMING_CAPS. - A VM do Dart não restaura mais automaticamente as configurações iniciais do terminal ao sair.
Ferramentas
#Linha de comando do Dart
#-
Removidas as ferramentas standalone
dart2jsedartdevc. -
Removida a ferramenta standalone
dartanalyzer.
2.17.0
#Bibliotecas
#dart:io
#
-
Adicionada nova propriedade
connectionFactoryaHttpClient. -
Adicionada nova propriedade
keyLogaHttpClient, que permite registrar chaves TLS para fins de depuração. -
Removidas constantes em
dart:ioseguindo a convençãoSCREAMING_CAPS -
Adicionada nova propriedade
allowLegacyUnsafeRenegotiationaSecurityContext, que permite renegociação TLS para sockets seguros de cliente.
Ferramentas
#Linha de comando do Dart
#-
Deprecated Descontinuada a ferramenta standalone
dart2js. -
Deprecated Descontinuada a ferramenta standalone
dartdevc. -
Removed Removida a ferramenta standalone
dartdoc.
2.16.0
#Bibliotecas
#dart:io
#
-
No Windows,
Directory.renamenão vai mais excluir um diretório senewPathespecificar um. Em vez disso, umaFileSystemExceptionserá lançada. -
Removed Removida a API
Platform.packageRoot.
dart:isolate
#
-
Removed Removida a API
Isolate.packageRoot.
Ferramentas
#Linha de comando do Dart
#-
Deprecated Descontinuada a ferramenta standalone
dartanalyzer. -
Deprecated Descontinuada a ferramenta standalone
dartdoc. -
Removed Removida a ferramenta standalone
pubdescontinuada.
2.15.0
#Bibliotecas
#dart:io
#
-
Atualizada a classe
SecurityContextpara definir a versão mínima do protocolo TLS como TLS1_2_VERSION (1.2) em vez de TLS1_VERSION.
dart:web_sql
#
dart:html
#
-
Removido
window.openDatabase(relacionado à exclusão dedart:web_sqlacima).
Ferramentas
#Linha de comando do Dart
#-
Removida a ferramenta standalone
dart2native. - Removida a ferramenta standalone
dartfmt.
VM do Dart
#-
Removido o suporte a native extensions no estilo
dart-ext: -
Isolates criados pela API
Isolate.spawn()agrupados para operar no mesmo heap gerenciado e, portanto, compartilhar várias estruturas de dados internas da VM.
2.14.0
#Bibliotecas
#dart:io
#
-
Os callbacks de setter
.authenticatee.authenticateProxyemHttpClientagora devem aceitar um argumentorealmnullable (para código já migrado para null safety).
dart:typed_data
#
- A maioria dos tipos expostos por esta biblioteca não pode mais ser estendida, implementada ou usada como mixin.
Ferramentas
#VM do Dart
#-
Expandos e os parâmetros
objectdeDart_NewWeakPersistentHandleeDart_NewFinalizableHandlenão aceitam maisPointere subtipos deStruct
Linha de comando do Dart
#-
Descontinuada a ferramenta standalone
dart2native - Descontinuada a ferramenta standalone
dartfmt.
dart2js
#
-
dart2jsnão oferece mais suporte a navegadores legados, porque emite JavaScript ES6+ por padrão.
Dart Dev Compiler (DDC)
#-
Alteradas as relações de subtipo das classes de
package:jspara ficarem mais corretas e consistentes com o Dart2JS.
2.13.0
#Bibliotecas
#package:js
#
-
Não é mais válido usar uma
Stringque corresponda a uma anotação@Nativeem uma anotação@JS()para uma classe de interop JS não anônima.
2.12.0
#Linguagem
#- O null safety agora é habilitado por padrão em todo código que não optou por sair.
-
Corrigido um bug de implementação em que
thisàs vezes passava por promoção de tipo em extensões.
Bibliotecas
#dart:ffi
#
-
Descontinuadas invocações com um
Tgenérico desizeOf<T>,Pointer<T>.elementAt(),Pointer<T extends Struct>.refePointer<T extends Struct>[] -
Descontinuado
allocateempackage:ffi, pois ele não será mais capaz de invocarsizeOf<T>de forma genérica. -
Descontinuados subtipos de
Structsem nenhum membro nativo.
Ferramentas
#VM do Dart
#-
Dart_WeakPersistentHandlenão se auto-exclui mais quando o objeto referenciado é coletado pelo garbage collector, para evitar race conditions. -
Renomeado
Dart_WeakPersistentHandleFinalizerparaDart_HandleFinalizere removido o argumentohandledele.
Pub
#2.10.0
#Ferramentas
#VM do Dart
#-
Renomeado
dart_api_dl.ccparadart_api_dl.ce alterado para um arquivo C puro.
2.9.0
#Bibliotecas
#dart:convert
#
-
Ao codificar uma string contendo surrogates não pareados como UTF-8, os surrogates
não pareados serão codificados como caracteres de substituição (
U+FFFD). - Ao decodificar UTF-8, surrogates codificados serão tratados como entrada malformada.
-
Alterado o número de caracteres de substituição emitidos
para sequências
de entrada malformadas, para igualar o padrão de codificação WHATWG, ao decodificar UTF-8
com
allowMalformed: true.
dart:html
#
-
CssClassSet.add()eCssClassSet.toggleagora retornamfalseem vez denullse oCssClassSetcorresponder a múltiplos elementos.
dart:mirrors
#
-
Os compiladores web (dart2js e DDC) agora produzem um erro de compilação
se
dart:mirrorsfor importado.
Ferramentas
#VM do Dart
#-
Ao imprimir uma string usando a função
print, a implementação padrão imprime quaisquer surrogates não pareados da string como caracteres de substituição (U+FFFD). -
A função
Dart_StringToUTF8na API do Dart converte surrogates não pareados em caracteres de substituição.
2.8.1
#Linguagem
#- Corrigido um bug de implementação em que a inferência de variáveis locais usava incorretamente o tipo promovido de uma variável de tipo.
-
Corrigido um bug de implementação envolvendo as cláusulas
implements Function,extends Functionouwith Function, que não tinham mais efeito desde o Dart 2.0.0.
Bibliotecas
#dart:async
#
-
Alterado o tipo de retorno de
StreamSubscription.cancel()paraFuture<void>. -
Dividida a função
runZoned()em duas funções:runZoned()erunZonedGuarded(), sendo que esta última tem um parâmetroonErrorobrigatório, e a primeira não tem nenhum. -
Erros passados para
Completer.completeError(),Stream.addError(),Future.error(), etc. não podem mais sernull. - Stack traces agora são non-null.
dart:core
#
-
Três membros de
RuneIteratornão retornam maisnullquando acessados antes da primeira chamada amoveNext(). -
O valor padrão de
defaultValueemString.fromEnvironment()agora é uma string vazia em vez denull. -
O valor padrão do parâmetro
defaultValuedeint.fromEnvironment()agora é zero.
dart:ffi
#
-
Alterados
Pointer.asFunction()eDynamicLibrary.lookupFunction()para métodos de extensão.
dart:io
#
-
Alterada a assinatura dos métodos de
HttpHeadersadd()eset. -
A classe
Socketagora lança umaSocketExceptionse o socket tiver sido explicitamente destruído ou atualizado para um socket seguro ao definir ou obter opções de socket. -
A classe
Processagora lança umStateErrorse o processo estiver desanexado (ProcessStartMode.detachedeProcessStartMode.detachedWithStdio) ao acessar o getterexitCode. -
A classe
Processagora também lança quando não está conectada ao stdio do processo filho (ProcessStartMode.detachedeProcessStartMode.inheritStdio) ao acessar os gettersstdin,stdoutestderr. -
O objeto fictício retornado se
FileStat.stat()ouFileStat.statSync()falhar agora contém timestamps Unix epoch em vez denullpara os gettersaccessed,changedemodified. -
A classe
HeaderValueagora faz o parsing de forma mais estrita em dois casos de borda inválidos.
Ferramentas
#Dart Dev Compiler (DDC)
#Corrigimos várias inconsistências entre o DDC e o Dart2JS para que os usuários encontrem com menos frequência código aceito por um compilador, mas que depois falha no outro.
- Excluída a versão legada (baseada no analisador) do DDC.
-
Funções passadas para JavaScript usando a especificação de interop
package:jsrecomendada agora devem ser encapsuladas com uma chamada aallowInterop. - Construtores em classes
@JS()devem ser marcados comexternal.
dart2js
#
- Os limites de parâmetros de tipo correspondentes agora só precisam ser subtipos mútuos, em vez de estruturalmente iguais, salvo renomeação das variáveis de tipo dos limites e equiparação de todos os tipos topo.
- Os tipos agora são normalizados.
- Construtores em classes
@JS()devem ser marcados comexternal. -
Removida por completo a flag
--package-root, que era oculta e desabilitada no Dart 2.0.0.
2.7.1
#2.7.0
#Linguagem
#Bibliotecas
#dart:io
#
-
Adicionado
IOOverrides.serverSocketBindpara facilitar a escrita de testes que desejam simularServerSocket.bind.
2.6.0
#Linguagem
#-
Alterada a inferência ao usar valores
Nullem um contextoFutureOr. Ou seja, restrições de formas semelhantes aNull<:FutureOr<T>agora produzemNullcomo solução paraT.
Bibliotecas
#dart:ffi
#
- A API agora usa membros de extensão estáticos.
- Removidos
Pointer.allocateePointer.freede gerenciamento de memória. Pointer.offsetByfoi removido; usecasteelementAtno lugar.
2.5.0
#Bibliotecas
#-
Vários métodos e propriedades de várias bibliotecas principais, que
declaravam um tipo de retorno
List<int>, foram atualizados para declarar um tipo de retornoUint8List.
dart:io
#
-
Os parâmetros posicionais opcionais
nameevaluedo construtor da classeCookieagora são obrigatórios. -
Os setters
nameevalueda classeCookieagora validam que as strings são formadas pelo conjunto de caracteres permitido e não são null.
Ferramentas
#Pub
#- Pacotes publicados no pub.dev não podem mais conter dependências git.
2.4.0
#Linguagem
#Bibliotecas
#dart:isolate
#
-
Isolate.resolvePackageUrisempre lançará umUnsupportedErrorquando compilado com dart2js ou DDC.
dart:async
#
-
Corrigido um bug na classe
StreamIteratorem queawait forpermitianullcomo stream.
2.2.0
#Bibliotecas
#package:kernel
#
-
A propriedade
klassdo getter na classeInstanceConstantda API de AST do Kernel foi renomeada paraclassNode, por consistência. -
Atualizada a implementação de
Linkpara usar links simbólicos verdadeiros em vez de junctions no Windows.
2.1.1
#Bibliotecas
#dart:io
#
Ferramentas
#VM do Dart
#-
Corrigida uma brecha de soundness ao usar
dart:mirrorspara invocar refletivamente um método de forma incorreta, violando seus tipos estáticos.
2.1.0
#Linguagem
#-
Vários erros estáticos que deveriam ter sido detectados
e reportados não eram suportados no 2.0.0. Eles agora são reportados, o que significa que
código incorreto existente pode mostrar novos erros:
- Mixins devem sobrescrever corretamente suas superclasses.
- Argumentos de tipo implícitos em cláusulas extends devem satisfazer os limites da classe.
- Membros de instância devem sombrear prefixos.
- Invocações de construtor devem usar sintaxe válida, mesmo com
newopcional. - Argumentos de tipo de typedefs genéricos devem satisfazer seus limites.
- Classes não podem implementar FutureOr.
- Métodos abstratos não podem sobrescrever de forma unsound um método concreto.
- Construtores constantes não podem redirecionar para construtores não constantes.
- Setters com o mesmo nome da classe envolvente não são permitidos.
Ferramentas
#dart2js
#
- Chaves duplicadas em um map const não são permitidas e produzem um erro de compilação.
2.0.0
#Linguagem
#- Substituído o sistema de tipos estático opcional e unsound por um sistema de tipos sound que usa inferência de tipos e verificações em runtime, anteriormente chamado de strong mode.
-
Funções marcadas como
asyncagora executam de forma síncrona até a primeira instruçãoawait.
Bibliotecas
#-
Constantes nas bibliotecas principais renomeadas de
SCREAMING_CAPSparalowerCamelCase. - Adicionados muitos novos métodos às classes das bibliotecas principais que precisarão ser implementados se você implementar as interfaces dessas classes.
-
dart:isolateedart:mirrorsnão são mais suportados ao usar o Dart para web.
Ferramentas
#Pub
#- Substituído o sistema de build baseado em transformers do pub por um novo sistema de build.
Salvo indicação em contrário, a documentação neste site reflete Dart 3.13.7. Página atualizada pela última vez em 2026-11-12. Ver código-fonte ou relatar um problema.
Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.