重大变更与弃用
- 3.9.0
- 3.8.0
- 3.7.0
- 3.6.0
- 3.5.0
- 3.4.0
- 3.3.0
- 3.2.0
- 3.1.0
- 3.0.0
- 2.19.0
- 2.18.0
- 2.17.0
- 2.16.0
- 2.15.0
- 2.14.0
- 2.13.0
- 2.12.0
- 2.10.0
- 2.9.0
- 2.8.1
- 2.7.1
- 2.7.0
- 2.6.0
- 2.5.0
- 2.4.0
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.0
此页面列出了 Dart SDK 更新中的所有重大变更和弃用,按发布版本和领域组织,以帮助 Dart 开发者了解和管理其影响。完整的发布说明可在Dart SDK 变更日志中查看。重大变更政策文档描述了 Dart 中重大变更和弃用的政策和流程。
此页面包含以下类型的重大变更:
- 无版本限制
Dart SDK 不维护向后兼容性,如果您的代码依赖于旧行为,则一旦升级 SDK 版本,代码可能会立即中断。
这些是大多数变更,在此列表中没有特殊标记。
- 语言版本限定
Dart SDK 维护现有代码的向后兼容性,行为变更仅在您升级代码的语言版本时生效(可能破坏依赖旧行为的代码)。
这些标记为: 语言版本限定
- 弃用
Dart SDK 维护已弃用代码的兼容性,并发出警告。弃用项随后会在后续版本中完全移除,从而破坏依赖旧行为的任何代码。
这些标记为: 已弃用 / 已移除
- 实验性
作为发布版本的一部分,但尚未在 SDK 中被视为稳定,并且可能在一个版本到另一个版本之间发生中断。实验性变更不一定总有相应的重大变更问题,但可能在SDK 变更日志中有更多详细信息。
这些标记为: 实验性
如果您对这些重大变更中的任何一个有疑问或疑虑,请在相关条目链接的重大变更问题上发表评论。要接收未来重大变更的通知,请加入 Dart announce 小组。
3.9.0
#语言
#- 语言版本限定 在计算类型提升、可达性和确定性赋值时,现在默认启用空安全。因此,改进的死代码分析可能会导致对以前通过分析的现有代码触发新的分析器诊断。
3.8.0
#库
#dart:html
#- 已移除
Element.created构造函数已移除。 dart:html中的原生类,例如HtmlElement,不再可以被扩展。
工具
#分析器
#- 已弃用
avoid_null_checks_in_equality_operatorslint 规则已弃用,应从analysis_options.yaml文件中移除。
开发 JavaScript 编译器 (DDC)
#- 现在,当一个重定向工厂构造函数被“拆分”并且其可选的非空参数之一未提供值时,会抛出运行时错误。未来这很可能会成为编译时错误。
生产 JavaScript 编译器 (dart2js)
#- 实验性 已移除
--experiment-new-rti和--use-old-rti标志不再受支持。
格式化工具 (dart format)
#- 语言版本限定 格式化工具进行了一些更改和修复,使得当代码的语言版本为 3.8 或更高时,会产生新的格式化输出。
3.7.0
#语言
#- 语言版本限定 命名为
_的局部变量和参数现在是非绑定的,不能再使用或访问。 - 可达性分析现在考虑字段是否通过
is或as提升为Null类型。这使得类型系统更加自洽,因为它反映了提升局部变量的行为。这一变化预计在实践中不会产生任何差异。
库
#dart:html, dart:indexed:db, dart:svg, dart:web_audo, dart:web_gl, dart:js
#- 已弃用 这些旧版 Web 库已正式弃用。预计它们将在未来版本中移除。项目应迁移到使用
package:web和dart:js_interop。了解更多信息,请查看迁移到 package:web。
dart:js, dart:js_util, package:js
#- 已弃用 这些旧版 JS 互操作库已正式弃用。预计它们将在未来版本中移除。项目应迁移到使用
dart:js_interop。了解更多信息,请查看JS 互操作用法。
工具
#分析器
#- 已移除
package_api_docs和unsafe_htmllint 规则已移除,应从analysis_options.yaml文件中删除。
格式化工具 (dart format)
#- 语言版本限定 格式化工具实现了一种新样式,当使用 3.7 或更高语言版本格式化代码时,会产生新的输出。
- 已移除
dart format的--fix标志不再受支持。要应用类似的修复及更多功能,请配置您的分析选项并运行dart fix。 - 已弃用
dart format的--line-length选项已弃用并设置为移除。所有用法都应迁移到新的--page-width选项。
3.6.0
#语言
#- Dart 用于对 throw 表达式的操作数执行类型推断的上下文已从“未知类型”更改为
Object。这使得类型系统更加自洽,因为它反映了抛出null是不合法的。这一变化预计在实践中不会产生任何差异。
库
#dart:io
#- 已移除
Platform()构造函数已移除。所有Platform实例化都应移除。 HttpClient现在会在重定向缺少“Location”头时抛出RedirectException而不是StateError。
工具
#分析器
#- 已弃用
package_api_docs和unsafe_htmllint 规则已弃用,并计划在 Dart 3.7 中移除。
编译器前端 (cfe)
#- Dart 编译器现在会在类型模式传入子类型测试过程之前计算其上闭包和下闭包。在 Dart 3.6 之前,编译器在上下限计算的最开始就计算它们。分析器已经遵循此行为,因此已经通过分析的应用程序不太可能受到此更改的影响。
Wasm 编译器 (dart2wasm)
#- 当编译为 WebAssembly 时,条件导入上的
dart.library.js条件现在为false。应改用dart.library.js_interop条件。
格式化工具 (dart format)
#当使用 Dart 3.6 SDK 或更高版本运行 dart format 时,以下更改可能会导致细微的格式化变更:
- 保留旧式函数类型形式参数的类型参数,这些形式参数也使用
this.或super.。 - 正确格式化同时包含
as和if子句的导入。
Pub
#- 如果 git 中跟踪的文件有未提交的更改,
dart pub publish现在会发出警告。
3.5.0
#语言
#- 编译器用于对
await表达式的操作数执行类型推断的上下文已更改,以匹配分析器的行为。 - 编译器用于对“if-null”表达式 (
e1 ?? e2) 的右侧执行类型推断的上下文已更改,以匹配分析器的行为。旧行为可以通过提供显式类型来恢复。
库
#dart:core
#DateTime现在在 Web 平台上存储微秒,更接近原生平台的行为。
dart:io
#dart:js_interop
#importModule现在接受JSAny而不是String,以支持其他 JS 值,例如TrustedScriptURL对象。isTruthy和not现在返回JSBoolean而不是bool,以与其他 JS 运算符方法保持一致。ExternalDartReference不再实现Object。相反,它现在接受一个类型参数 (T),其边界为Object?,以捕获外部化 Dart 对象的类型。
dart:typed_data
#- 已移除 类型化数据的不可修改视图类已移除。请改用类型化数据列表上的新
asUnmodifiableView方法,而不是使用这些类的构造函数。
运行时
#- 已移除 Dart VM 不再支持不健全的空安全。
--no-sound-null-safetyCLI 选项已移除。Dart_NewListOf和Dart_IsLegacyType函数已从 C API 中移除。
- 已移除
Dart_DefaultCanonicalizeUrl函数已从 C API 中移除。
3.4.0
#语言
#- 用于强制转换模式的模式上下文类型模式现在是
_(未知类型),而不是Object?. - Dart 编译器用于对映射和集合字面量中空感知扩展运算符 (
...?) 的操作数执行类型推断的类型模式已设为可空,以匹配列表字面量中当前发生的情况。
库
#dart:cli
#- 实验性 已移除
waitFor函数已移除。
dart:html, dart:indexed:db, dart:svg, dart:web_audo, dart:web_gl
#- 已弃用 这些库现在被标记为旧版,未来将获得较少支持。新项目应优先使用
package:web和dart:js_interop。了解更多信息,请查看迁移到 package:web。
dart:js
#- 已弃用 此库现在被标记为旧版,未来将获得较少支持。用法应迁移到
dart:js_interop和dart:js_interop_unsafe。了解更多信息,请查看/go/next-gen-js-interop。
dart:js_util
#- 已弃用 此库现在被标记为旧版,未来将获得较少支持。用法应迁移到
dart:js_interop和dart:js_interop_unsafe。了解更多信息,请查看/go/next-gen-js-interop。
dart:io
#Stdout有一个新的字段lineTerminator,它允许开发者控制stdout和stderr使用的行尾符。 实现Stdout的类必须定义lineTerminator字段。stdout和stderr的默认语义未更改。- 已弃用
FileSystemDeleteEvent.isDirectory属性。它总是返回false。
dart:typed_data
#- 已弃用 类型化数据的不可修改视图类已弃用。请改用类型化数据列表上的新
asUnmodifiableView方法,而不是使用这些类的构造函数。
工具
#生产 JavaScript 编译器 (dart2js)
#- 实验性 已弃用 您现在应该为
--dump-infoCLI 选项指定binary或json格式。json格式已弃用,并可能在未来的 Dart 版本中移除。
Wasm 编译器 (dart2wasm)
#- 实验性 各种
dart compile wasmCLI 参数已更新、移除或替换。了解更多信息,请运行dart compile wasm --verbose --help。
运行时
#- 已移除 Dart VM 不再支持外部字符串。因此,
Dart_IsExternalString、Dart_NewExternalLatin1String和Dart_NewExternalUTF16String函数已从 Dart C API 中移除。
3.3.0
#SDK
#实验性 已移除 以下实验性功能现已停用,因为它们已在 Dart 3 中发布,并且在语言版本为 3.0 或更高时不再需要。应从分析选项、CLI 命令和 IDE 配置中移除它们的配置。
模式记录类修饰符密封类
语言
#库
#dart:cli
#- 实验性 已弃用
waitFor函数在下一个版本中仍将弃用,并计划在 Dart 3.4 中移除。
dart:ffi
#- 已弃用
Pointer类型上的elementAt指针算术方法已弃用。请改用-和+运算符。 - 实验性 已移除 先前已弃用的
@FfiNative注解已移除。用法应更新为使用@Native注解。
dart:html
#- 现在建议使用
package:http,而不是直接使用HttpRequest。
dart:io
#- 现在建议使用
package:http,而不是直接使用HttpClient。
dart:js_interop
#- 实验性 像
JSAny这样的 JS 类型有新的编译器特定表示类型。 - 实验性 用户定义的
@staticInterop类不再能实现JSAny或JSObject。用法应迁移到JSObject.fromInteropObject或定义为扩展类型。 - 实验性
JSArray和JSPromise现在具有泛型参数。 - 实验性 各种扩展成员已被移动或重命名。要了解更新后的扩展,请参考
JSAnyUtilityExtension和JSAnyOperatorExtension。
dart:typed_data
#- 类型化数据的不可修改视图类将在 Dart 3.4 中弃用。请改用类型化数据列表上的新
asUnmodifiableView方法,而不是使用这些类的构造函数。
dart:nativewrappers
#- 实验性 所有原生包装类现在都标记为
base,以便其任何子类型都不能被实现。
工具
#生产 JavaScript 编译器 (dart2js)
#- 传递给
noSuchMethod的Invocation不再具有缩小的memberName,即使使用--minify编译也是如此。
Wasm 编译器 (dart2wasm)
#- 实验性 禁止导入旧版 JS 互操作库。请改用
dart:js_interop和dart:js_interop_unsafe。
分析器
#实验性 无效的
dart doc注释指令现在由分析器报告。由于类型提升的改进,以下分析器诊断可能会对以前通过分析的现有代码触发:
不必要的非空断言不必要的类型转换无效的空感知运算符
Linter
#iterable_contains_unrelated_type和list_remove_unrelated_typelint 已移除。考虑迁移到扩展的collection_methods_unrelated_typelint。由于健全的空安全不再需要,以下 lint 已移除。您应该从
analysis_options.yaml文件和任何忽略注释中移除它们的配置。always_require_non_null_named_parametersavoid_returning_nullavoid_returning_null_for_future
3.2.0
#语言
#- 语言版本限定 将可拒绝模式的分割点更改为顶级模式,以便 if-case 语句中的类型提升保持一致,无论检查对象是否可能抛出异常。
库
#dart:cli
#- 实验性 已弃用
waitFor函数。
dart:convert
#- 将
utf8.encode()和Utf8Codec.encode()的返回类型从List<int>更改为Uint8List。
dart:developer
#- 已弃用
Service.getIsolateID方法。
dart:ffi
#- 更改了
NativeCallable.nativeFunction,现在如果接收器已关闭,调用会抛出错误,而不是返回nullptr。
dart:io
#dart:js_interop
#- 实验性 已移除
JSNumber.toDart已移除,请改用toDartDouble和toDartInt。 - 实验性 已移除
Object.toJS已移除,请改用Object.toJSBox. - 实验性 使用
dart:js_interop的外部 JS 互操作 API 已限制为一组允许的类型。 - 实验性 禁止在 dart2wasm 上使用
isNull和isUndefined。 - 实验性
typeofEquals和instanceofAPI 已更改为均返回 bool 而不是JSBoolean。此外,typeofEquals现在接受String而不是JSString。 - 实验性
JSAny和JSObject类型已更改为只能由用户@staticInterop类型实现,不能扩展。 - 实验性
JSArray.withLength已更改为接受int而不是JSNumber。
工具
#开发 JavaScript 编译器 (DDC)
#- 添加了 JavaScript
Symbol和BigInt类型的拦截器;它们不应再与package:js类一起使用。
生产 JavaScript 编译器 (dart2js)
#- 添加了 JavaScript
Symbol和BigInt类型的拦截器;它们不应再与package:js类一起使用。
分析器
#语言版本限定 私有 final 字段提升可能会导致以下分析器警告对以前通过分析的现有代码触发:
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
#库
#dart:async
#- 为纯抽象类添加了
interface修饰符:MultiStreamController、StreamConsumer、StreamIterator和StreamTransformer。
dart:io
#- 为
Cookie类添加了sameSite,并添加了SameSite类。. FileSystemEvent是sealed的。这意味着FileSystemEvent不能被扩展或实现。
dart:js_interop
#- 实验性 已移除
ObjectLiteral;请使用{}.jsify()创建不带命名成员的对象字面量。
package:js
#external@staticInterop成员和external扩展成员不再能用作 tear-offs。请声明一个调用这些成员的闭包或非external方法,并改用它。external@staticInterop成员和external扩展成员对于具有可选参数的方法将生成略有不同的 JS 代码。
3.0.0
#语言
#语言版本限定 将switch case的解释从常量表达式更改为模式。
语言版本限定 已升级到 Dart 3.0 的库中的类声明默认不再能用作 mixin。
如果
continue语句的目标标签不是循环(for、do和while语句)或switch成员,Dart 会报告编译时错误。
库
#- 以下现有类已成为 mixin 类:
Iterable,IterableMixin,IterableBase,ListMixin,SetMixin,MapMixin,LinkedListEntry,StringConversionSink。
dart:core
#- 已弃用 已弃用的 API。
dart:async
#- 已移除 移除了已弃用的
DeferredLibrary类。
dart:collection
#- 语言版本限定 平台库的变更。
dart:developer
#- 已移除 移除了已弃用的
MAX_USER_TAGS常量。请改用maxUserTags。 - 已移除 移除了已弃用的
Metrics、Metric、Counter和Gauge类,因为它们自 Dart 2.0 以来一直损坏。
dart:ffi
#- 实验性 已弃用
@FfiNative注解现在已弃用。用法应更新为使用@Native注解。
dart:html
#dart:math
#- 语言版本限定
Random接口只能被实现,不能被扩展。
dart:io
#- 更新了
NetworkProfiling以适应 vm_service:11.0.0 中引入的新Stringid。
2.19.0
#语言
#库
#dart:convert
#- 已移除 先前已弃用的 API
JsonUtf8Encoder中的 [DEFAULT_BUFFER_SIZE] 已移除。
dart:developer
#- 已移除 移除了先前已弃用的 API
ServiceExtensionResponse中的kInvalidParams,kExtensionError,kExtensionErrorMax, 和kExtensionErrorMin。
dart:ffi
#- 将
Pointer的运行时类型参数更改为Never,以准备完全移除运行时类型参数。将Pointer.toString更改为不报告任何类型参数。
dart:io
#- 不允许使用负数或十六进制内容长度头.
File.create现在接受新的可选exclusivebool参数,当其为true时,如果目标文件已存在,操作将失败。- 多次调用
ResourceHandle.toFile()、ResourceHandle.toSocket()、ResourceHandle.toRawSocket()或ResourceHandle.toRawDatagramSocket()现在会抛出StateError。
dart:isolate
#- 将
SendPort.send恢复为在不确定共享相同代码的隔离区之间发送消息时,对消息内容进行严格检查。
dart:mirrors
#- 已移除 移除了 API
MirrorsUsed和Comment。
package:js
#- 预览功能
@staticInterop的重大变更- 禁止带有此注解的类使用
external生成构造函数。详情请参阅 48730 和 49941。 - 禁止带有此注解的类的外部扩展成员使用类型参数.
- 带有此注解的类也应具有
@JS注解。 - 带有此注解的类不能被不带此注解的类实现。
- 禁止带有此注解的类使用
dart2js
#2.18.0
#语言
#库
#dart:io
#- 将
dart:io中RedirectException的uri属性更改为可空. - 移除了
dart:io网络 API 中遵循SCREAMING_CAPS命名约定的常量. - Dart VM 在退出时不再自动恢复初始终端设置。
工具
#Dart 命令行
#2.17.0
#库
#dart:io
#- 为
HttpClient添加了新的connectionFactory属性. - 为
HttpClient添加了新的keyLog属性,该属性允许记录 TLS 密钥用于调试。 - 移除了
dart:io中遵循SCREAMING_CAPS命名约定的常量 - 为
SecurityContext添加了一个新的allowLegacyUnsafeRenegotiation属性,该属性允许客户端安全套接字进行 TLS 重新协商。
工具
#Dart 命令行
#- 已弃用 弃用了独立的
dart2js工具。 - 已弃用 弃用了独立的
dartdevc工具。 - 已移除 移除了独立的
dartdoc工具。
2.16.0
#库
#dart:io
#- 在 Windows 上,如果
newPath指定了目录,Directory.rename将不再删除该目录。相反,将抛出FileSystemException。 - 已移除 移除了
Platform.packageRootAPI。
dart:isolate
#工具
#Dart 命令行
#- 已弃用 弃用了独立的
dartanalyzer工具。 - 已弃用 弃用了独立的
dartdoc工具。 - 已移除 移除了已弃用的独立
pub工具。
2.15.0
#库
#dart:io
#- 更新了
SecurityContext类,将最低 TLS 协议版本设置为 TLS1_2_VERSION (1.2) 而不是 TLS1_VERSION。
dart:web_sql
#dart:html
#- 移除了
window.openDatabase(与上面dart:web_sql的删除相关)。
工具
#Dart 命令行
#- 移除了独立的
dart2native工具. - 移除了独立的
dartfmt工具。
Dart VM
#- 移除了对
dart-ext:风格原生扩展的支持 - 通过
Isolate.spawn()API 产生的隔离区被分组,以便在同一个托管堆上操作,从而共享各种 VM 内部数据结构。
2.14.0
#库
#dart:io
#HttpClient中的 setter 回调.authenticate和.authenticateProxy现在必须接受可空的realm参数(对于未迁移的空安全代码)。
dart:typed_data
#- 此库暴露的大多数类型不再可以被扩展、实现或混入。
工具
#Dart VM
#- Expandos,以及
Dart_NewWeakPersistentHandle和Dart_NewFinalizableHandle的object参数,不再接受Pointer和Struct的子类型。
Dart 命令行
#- 弃用了独立的
dart2native工具 - 弃用了独立的
dartfmt工具。
dart2js
#dart2js不再支持旧版浏览器,因为它默认生成 ES6+ JavaScript。
Dart 开发编译器 (DDC)
#- 更改了
package:js类的子类型关系,使其更正确并与 Dart2JS 保持一致。
2.13.0
#库
#package:js
#- 对于非匿名 JS 互操作类,在
@JS()注解中使用与@Native注解匹配的String不再有效。
2.12.0
#语言
#库
#dart:ffi
#- 弃用了带有泛型
T的调用,包括sizeOf<T>、Pointer<T>.elementAt()、Pointer<T extends Struct>.ref和Pointer<T extends Struct>[]。 - 弃用了
package:ffi中的allocate,因为它将不再能够泛型地调用sizeOf<T>。 - 弃用了没有任何原生成员的
Struct子类型.
工具
#Dart VM
#- 当引用对象被垃圾回收时,
Dart_WeakPersistentHandle不再自动删除自身,以避免竞态条件。 - 将
Dart_WeakPersistentHandleFinalizer重命名为Dart_HandleFinalizer并移除了其handle参数。
Pub
#2.10.0
#工具
#Dart VM
#- 将
dart_api_dl.cc重命名为dart_api_dl.c并更改为纯 C 文件。
2.9.0
#库
#dart:convert
#- 当将包含不成对代理的字符串编码为 UTF-8 时,不成对代理将编码为替换字符 (
U+FFFD)。 - 当解码 UTF-8 时,编码的代理将被视为格式错误的输入。
- 当使用
allowMalformed: true解码 UTF-8 时,更改了为格式错误的输入序列发出的替换字符数量,以匹配 WHATWG 编码标准。
dart:html
#- 如果
CssClassSet对应于多个元素,CssClassSet.add()和CssClassSet.toggle现在返回false而不是null。
dart:mirrors
#工具
#Dart VM
#- 当使用
print函数打印字符串时,默认实现会将字符串中任何不成对的代理打印为替换字符 (U+FFFD)。 - Dart API 中的
Dart_StringToUTF8函数将不成对的代理转换为替换字符。
2.8.1
#语言
#- 修复了一个实现错误,即局部变量推断会错误地使用类型变量的提升类型。
- 修复了一个实现错误,该错误涉及
implements Function、extends Function或with Function子句自 Dart 2.0.0 起不再生效。
库
#dart:async
#- 将
StreamSubscription.cancel()的返回类型更改为Future<void>. - 将
runZoned()函数拆分为两个函数:runZoned()和runZonedGuarded(),其中后者具有必需的onError参数,而前者没有。 - 传递给
Completer.completeError()、Stream.addError()、Future.error()等的错误不能再为null。 - 使堆栈跟踪非空.
dart:core
#RuneIterator上的三个成员在首次调用moveNext()之前访问时不再返回null。String.fromEnvironment()中defaultValue的默认值现在是空字符串而不是null。int.fromEnvironment()的defaultValue参数的默认值现在是零。
dart:ffi
#- 将
Pointer.asFunction()和DynamicLibrary.lookupFunction()更改为扩展方法。
dart:io
#- 更改了
HttpHeaders方法的签名add()和set。 - 如果套接字在设置或获取套接字选项时已被明确销毁或升级为安全套接字,则
Socket类现在会抛出SocketException。 - 如果进程在访问
exitCodegetter 时处于分离状态(ProcessStartMode.detached和ProcessStartMode.detachedWithStdio),则Process类现在会抛出StateError。 - 当未连接到子进程的 stdio(
ProcessStartMode.detached和ProcessStartMode.inheritStdio)时,Process类在访问stdin、stdout和stderrgetter 时也会抛出错误。 - 如果
FileStat.stat()或FileStat.statSync()失败,返回的虚拟对象现在包含 Unix 纪元时间戳,而不是accessed、changed和modifiedgetter 的null。 HeaderValue类现在在两个无效的边缘情况中解析得更严格。
工具
#Dart 开发编译器 (DDC)
#我们修复了 DDC 和 Dart2JS 之间的多处不一致,以便用户更少遇到一个编译器接受但另一个编译器失败的代码。
- 删除了DDC的旧版(基于分析器)版本。
- 现在,使用推荐的
package:js互操作规范传递给 JavaScript 的函数必须用allowInterop调用包裹起来。 @JS()类中的构造函数必须用external标记。
dart2js
#- 相应的类型参数边界现在只需是相互子类型,而不是在绑定类型变量重命名和所有顶层类型相等的情况下结构上相等。
- 类型现在已标准化。
@JS()类中的构造函数必须用external标记。- 完全移除了
--package-root标志,该标志在 Dart 2.0.0 中已隐藏和禁用。
2.7.1
#2.7.0
#语言
#库
#dart:io
#- 添加了
IOOverrides.serverSocketBind,以帮助编写希望模拟ServerSocket.bind的测试。
2.6.0
#语言
#- 在使用
FutureOr上下文中的Null值时更改了推断。即,类似于Null<:FutureOr<T>的约束现在将Null作为T的解决方案。
库
#dart:ffi
#- API 现在使用静态扩展成员。
- 移除了内存管理
Pointer.allocate和Pointer.free。 Pointer.offsetBy已移除,请改用cast和elementAt。
2.5.0
#库
#- 各种核心库中的各种方法和属性,以前声明返回类型为
List<int>的,已更新为声明返回类型为Uint8List。
dart:io
#Cookie类的构造函数的name和value可选位置参数现在是强制性的。Cookie类的name和valuesetter 现在会验证字符串是否由允许的字符集组成且不为 null。
工具
#Pub
#- 发布到 pub.dev 的软件包不再能包含 git 依赖项。
2.4.0
#语言
#库
#dart:isolate
#- 当使用 dart2js 或 DDC 编译时,
Isolate.resolvePackageUri将始终抛出UnsupportedError。
dart:async
#- 修复了
StreamIterator类中的一个错误,其中await for允许null作为流。
2.2.0
#库
#package:kernel
#- Kernel AST API 中
InstanceConstant类上的klassgetter 已重命名为classNode以保持一致性。 - 更新了
Link实现,以便在 Windows 上使用真正的符号链接而不是连接点。
2.1.1
#库
#dart:io
#工具
#Dart VM
#2.1.0
#语言
#- 2.0.0 版本中未支持许多本应被检测和报告的静态错误。现在这些错误已被报告,这意味着现有的错误代码可能会显示新的错误:
工具
#dart2js
#- 常量映射中不允许重复键,并且会产生编译时错误。
2.0.0
#语言
#- 用基于类型推断和运行时检查的健全静态类型系统取代了不健全的可选静态类型系统,后者以前称为强模式。
- 标记为
async的函数现在同步运行,直到遇到第一个await语句。
库
#- 将核心库中的常量从
SCREAMING_CAPS重命名为lowerCamelCase。 - 为核心库类添加了许多新方法,如果您实现这些类的接口,则需要实现这些方法。
- 在 Web 上使用 Dart 时,不再支持
dart:isolate和dart:mirrors。
工具
#Pub
#- 将 pub 基于转换器的构建系统替换为新的构建系统。