重大更改和弃用
- 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 中所有语言和库的重大更改和弃用,按发行版和区域组织,以帮助 Dart 用户了解和管理它们的影响。完整的发布说明可在 Dart SDK 变更日志 中找到。 重大更改策略 文档描述了 Dart 中重大更改和弃用的策略和流程。
本页面包含以下类型的重大更改:
未版本化 : Dart SDK 不维护向后兼容性,如果您依赖于之前的行为,则您的代码在您 升级 SDK 版本 时可能会立即中断。
这些更改占大多数,在本列表中没有特殊标记。
语言版本化 : Dart SDK 维护现有代码的向后兼容性,并且行为更改仅在您升级代码的 语言版本 时才会生效(可能会破坏依赖于先前行为的代码)。
这些标记为:
弃用 : Dart SDK 维护对弃用代码的兼容性,并带有警告。然后在后续版本中完全删除弃用内容,从而破坏任何依赖于先前行为的代码。
这些标记为: /
实验性 : 作为发行版的一部分,但在 SDK 中尚未被视为稳定版本,并且可能在一个版本到另一个版本之间发生中断。实验性更改并不总是具有相应的重大更改问题,但在 SDK 变更日志 中可能会有更多详细信息。
这些标记为:
如果您对任何这些重大更改有任何疑问或疑虑,请评论相关条目中链接的重大更改问题。要接收有关未来重大更改的通知,请加入 Dart 公告 组。
3.7.0
#暂定
以下更改预计将包含在 3.7 稳定版中,但在那之前最终列表可能会更改。为了减少这些更改的潜在影响,请考虑在 3.7 版本发布之前考虑它们。
语言
#- 名为
_的局部变量和参数 现在是非绑定的,不能再使用或访问。 - 可达性分析现在考虑使用
is或as将字段类型提升为Null的情况 。这使得类型系统更加自洽,因为它反映了提升的局部变量的行为。此更改预计不会在实践中产生任何差异。
工具
#分析器
#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现在通过 抛出RedirectException而不是StateError来响应缺少“Location”标头的重定向。
工具
#分析器
#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
#dart pub publish现在会在 git 中跟踪的文件具有未提交的更改时发出警告。
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 选项。 - 已从 C API 中删除
Dart_NewListOf和Dart_IsLegacyType函数。 - 已从 C API 中删除
Dart_DefaultCanonicalizeUrl函数。
3.4.0
#语言
#- 强制模式的模式上下文类型模式现在为
_(未知类型)而不是Object?。 - Dart 编译器用于对映射和集合文字中的空感知扩展运算符 (
...?) 的操作数执行类型推断的类型模式已变为可空 ,以匹配当前在列表文字中发生的情况。
库
#dart:cli
#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 使用的行尾。](https://github.com/dart-lang/sdk/issues/53863) 实现 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 配置中删除它们的配置。
patternsrecordsclass-modiferssealed-class
语言
#库
#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注释指令。由于 类型提升方面的改进 ,以下分析器诊断可能会在先前通过分析的现有代码上触发:
unnecessary_non_null_assertionunnecessary_castinvalid_null_aware_operator
Lint 检查器
#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
#dart:convert
#- 更改了
utf8.encode()和Utf8Codec.encode()的返回类型 从List<int>到Uint8List。
dart:developer
#Service.getIsolateID方法。
dart:ffi
#- 更改了
NativeCallable.nativeFunction,以便如果接收器已关闭,调用现在会抛出错误 ,而不是返回nullptr。
dart:io
#- 消除了 HTTP 标头中的尾随空格 。
- 在折叠的标头值的折叠点插入了一个空格
HttpClientResponse.headers和HttpRequest.headers返回。
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 字段提升 可能会导致以下分析器警告在先前通过分析的现有代码上触发:
class 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扩展成员不能再用作撕裂器。声明一个闭包或一个非external方法来调用这些成员,并改用它。external@staticInterop成员和external扩展成员将为具有可选参数的方法生成略微不同的 JS 代码。
3.0.0
#语言
#更改了[switch 语句分支]的解释,从常量表达式更改为模式。
已升级到 Dart 3.0 的库中的类声明 默认情况下不能再用作 mixin 。
如果
continue语句的目标是[标签],而不是循环(for、do和while语句)或switch成员,则 Dart 会报告编译时错误 。
库
#- 以下现有类已成为 mixin 类:
Iterable、IterableMixin、IterableBase、ListMixin、SetMixin、MapMixin、LinkedListEntry、StringConversionSink。
dart:core
#- 已弃用的 API 。
dart:async
#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
#语言
#- 由于类型
Null和Never, 将其他代码标记为不可达 。 - 不要将不可访问的私有名称委托给
noSuchMethod。 - 在顶级类型推断期间, 对所有循环依赖项报告编译时错误 。
库
#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属性更改为可空 。 - 删除了遵循
SCREAMING_CAPS约定的dart:io网络 API 中的常量 。 - Dart VM 不再在退出时自动恢复初始终端设置 。
工具
#Dart 命令行
#2.17.0
#库
#dart:io
#- 向
HttpClient添加了新的connectionFactory属性 。 - 向
HttpClient添加了新的keyLog属性 ,允许记录 TLS 密钥以进行调试。 - 删除了遵循
SCREAMING_CAPS的dart:io常量 - 向
SecurityContext添加了新的allowLegacyUnsafeRenegotiation属性 ,允许客户端安全套接字进行 TLS 重新协商。
工具
#Dart 命令行
#2.16.0
#库
#dart:io
#- 在 Windows 上,如果
newPath指定了一个,则Directory.rename将不再删除目录 。相反,将抛出FileSystemException。 - 已删除
Platform.packageRootAPI 。
dart:isolate
#工具
#Dart 命令行
#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 时, 编码的代理字符将被视为格式错误的输入 。
- 更改了为格式错误的输入序列发出的替换字符数量 ,使其与WHATWG 编码标准匹配,当使用
allowMalformed: true解码 UTF-8 时。
dart:html
#- 如果
CssClassSet对应于多个元素,则CssClassSet.add()和CssClassSet.toggle现在返回false而不是null。
dart:mirrors
#工具
#Dart VM
#- 使用
print函数打印字符串时, 默认实现会将字符串中的任何不成对的代理字符打印为替换字符 (U+FFFD)。 - Dart API 中的
Dart_StringToUTF8函数 会将不成对的代理字符转换为替换字符 。
2.8.1
#语言
#- 修复了一个实现错误 ,其中局部变量推断会错误地使用类型变量的提升类型。
- [修复了一个实现错误](https://github.com/dart-lang/sdk/issues/41362),围绕子句
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。 - 如果进程已分离(
ProcessStartMode.detached和ProcessStartMode.detachedWithStdio),则Process类现在会抛出StateError,访问exitCodegetter 时。 - 如果未连接到子进程的 stdio(
ProcessStartMode.detached和ProcessStartMode.inheritStdio),则Process类现在也会抛出 ,访问stdin、stdout和stderrgetter 时。 - 如果
FileStat.stat()或FileStat.statSync()失败,则返回的虚拟对象 现在包含 Unix 时间戳 ,而不是accessed、changed和modifiedgetter 的null。 HeaderValue类现在在两个无效的边缘情况下进行更严格的解析 。
工具
#Dart 开发编译器 (DDC)
#我们修复了 DDC 和 Dart2JS 之间的几个不一致之处,以便用户较少遇到一个编译器接受但另一个编译器失败的代码。
- 删除了 DDC 的旧版(基于分析器)版本。
- 现在必须使用对
allowInterop的调用来包装传递到 JavaScript 的函数,这些函数使用推荐的package:js交互操作规范。 @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
#- 修复了使用
dart:mirrors时的一个健全性漏洞 ,该漏洞以违反其静态类型的不正确方式反射地调用方法。
2.1.0
#语言
#- 许多应该被检测并报告的静态错误在 2.0.0 中不受支持。这些错误现在已报告,这意味着现有不正确的代码可能会显示新的错误:
工具
#dart2js
#- 不允许在 const map 中使用重复的键,并会产生编译时错误。
2.0.0
#语言
#- 使用类型推断和运行时检查替换了不健全的可选静态类型系统,以前称为强模式。
- [标记为
async的函数现在同步运行](https://github.com/dart-lang/sdk/issues/30345),直到第一个await语句。
库
#- 将核心库中的常量名称从
SCREAMING_CAPS重命名为lowerCamelCase。 - 向核心库类添加了许多新方法,如果您实现这些类的接口,则需要实现这些方法。
- 使用 Dart 编写 Web 应用时,不再支持
dart:isolate和dart:mirrors。
工具
#Pub
#- 使用 新的构建系统 替换了 pub 基于转换器的构建系统。
除非另有说明,否则本网站上的文档反映的是 Dart 3.6.0。页面最后更新于 2025-02-05。 查看源代码 或 报告问题.