FEATURED · 精选文章

Flutter 的下一步, Dart 3 重大变更即将在 2023 到来

发布时间 / 2026/8/27 18:52:02
来源 / 创域科博编辑部
栏目 / 资讯中心
Flutter 的下一步, Dart 3 重大变更即将在 2023 到来 在过去的四年里 Dart 已经发展成为一门高效、可移植的现代化语言而下一个版本 Dart 3 将达到可靠的 null 安全语言的最后一步。作为 null safety 的最后一步本次将删除几个历史 Dart 和 SDK artifacts包括删除对 running without sound null safety 的支持。如今许多现代编程语言都支持 null safety 比如 Swift、C# 和 Kotlin 等语言可以在其中将变量声明为非空永远不能保持空值或可为空可以保存一个值或 null的情况这些类型系统会和静态分析结合使用以检测将 null 赋值给不可为 null 的变量。同样Dart 语言中的 null 安全支持默认情况下使变量不可为 null并且仅在显式声明时才允许 null。在 Dart 3 中所有 Dart 代码都将使用健全的空安全自从 Dart 2.12 引入空安全到现在已经三年了在此期间开发者可以在没有 null safety 的情况下运行也可以在具有部分 null safety 的混合模式下运行也可以在具有完全健全的 null safety 的情况下运行。当 100% 的代码包括所有依赖项已迁移到 null safety 时就会出现完全可靠的空安全支持在此期间 Dart 开发人员有时间一步一步地迁移现有代码但是支持多种模式会增加开销和复杂性。首先Dart 开发人员需要了解以上三种模式每当阅读一段 Dart 代码时就必须检查语言版本以查看类型是否默认为非空、默认可为空或它们的某种组合。其次在我们的编译器和运行时支持所有三种模式会减慢 Dart SDK 的发展速度这种支持增加了添加新功能的成本和复杂性。从在 Dart 3 开始正如之前 2.18 里提前宣布的那样sound null safety 将是唯一受支持的模式**小于 2.12 的 SDK 约束的 Pubspec 文件将在 Dart 3 及更高版本中停止解析。当开发者将依赖约束设置为小于 2.12例如// dart2.9时任何包含语言标记的源代码都将失效。根据目前的观测我们相信此时大约85% 的 flutter run 执行都使用了空安全如果你还在剩余的 15% 中那请在 Dart 3 发布之前迁移预计在 2023 年年中左右。Breaking 和 API 更改除了 null 安全更改之外Dart 3 还进行了一些其他更改以删除 Dart 和核心库 API 中的一些历史 artifacts这些更改包括删除已停用的核心库 API ( #49529 )删除默认参数值的历史语法 ( #2357 )要求明确的 tear-offs ( ##2399 )。这些更改对迁移到使用 null 安全的代码的影响很小当第一个 Dart 3 alpha 版本发布时开发者可以快速测试这些较小的 Breaking。Dart 3 的新特性和功能Dart 3 也有望包含许多新功能包括改进与其他编程语言的交互能力和新的语言特性 这部分内容将在2023 年 1 月 25 日的 Flutter Forward 中详细讨论。例如有被称为patterns的语言特性patterns让 Dart 语言更具表现力增加了对更多结构化数据的支持并使用代数数据类型实现了更实用的风格。以下代码显示了在一个函数上使用多个返回值的示例以及将这些返回值解构为单个变量的能力// A function which returns a record -- in this case a pair of two doubles: (double x, double y) getLocation(String name) { if (name Aarhus) { return (56.1629, 10.2039); } else { ... } } ​ // Deconstructing the returned record back into individual variables: void main(ListString arguments) { final (lat, long) getLocation(Aarhus); print(Current location: $lat, $long); } ​ // You can also define a hierarchy of classes, and then pattern match on those: sealed class Shape { double calculateArea(); } ​ class Square implements Shape { final double length; Square(this.length); double calculateArea() length * length; } ​ class Circle implements Shape { final double radius; ... } ​ double calculateArea(Shape shape) switch (shape) { Square(length: var l) l * l, Circle(radius: var r) math.pi * r * r };Beyond Dart 3目前除了 Dart 3 还有大量并行的潜在的新功能在处理首先正如去年提到的 Dart 团队正在努力支持将 Dart 代码编译为 WebAssembly (Wasm)Wasm 能让 Flutter Web 在浏览器中作为完整的原生代码运行。这是一项艰巨的任务除了更新 Dart 编译器之外还需要很多额外的工作。它需要与 W3C 和浏览器供应商合作通过 WasmGC 扩展在 Wasm 中添加对垃圾收集语言的支持。其次 Dart 团队正在研究macros启用静态元编程这种强大的机制允许一段代码宏在程序编译期间修改和扩展程序的源代码例如可以减少反序列化 JSON 或创建数据类所需的样板文件。Dart 3 发布路线接下来Dart 3 将在一系列里程碑中陆续推出目前的期望围绕这些日期2023 年 1 月/2 月左右Dart 3 alpha 发布它将专注于启用早期的 Dart 3 兼容性测试目标是让大家能够运行静态分析 (dart analyze/flutter analyze)理论上通过 Dart 3 alpha 静态分析的应用或包都可以支持 Dart 3 稳定版。2023 年 3 月/4 月左右Dart 3 测试版发布此版本预览了 Dart 3 中的新功能开发者可以使用它来试验新功能并就问题或改进建议提供反馈。2023 年年中左右Dart 3 稳定版发布健全的空安全将成为唯一支持的模式。总结Dart 3 版本计划于 2023 年年中左右发布它将包含几项重大更改其中主要是在没有健全的空安全的情况下你的代码将停止运行计划在 2023 年 1 月或 2 月左右准备好 Dart 3 alpha 版本可以将其用于 Dart 3 兼容性测试。在此期间你可以准备完成任何未完成的空安全迁移验证代码未使用任何已弃用的 API运行dart fix。Dart 3 还将包含几个新的强大功能例如 patterns 计划是希望在春季发布 Dart 3 beta 版展示所有新功能敬请期待作者恋猫de小郭链接https://juejin.cn/post/7174985128799076389最后如果想要成为架构师或想突破20~30K薪资范畴那就不要局限在编码业务要会选型、扩展提升编程思维。此外良好的职业规划也很重要学习的习惯很重要但是最重要的还是要能持之以恒任何不能坚持落实的计划都是空谈。如果你没有方向这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》帮大家将杂乱、零散、碎片化的知识进行体系化的整理让大家系统而高效地掌握Android开发的各个知识点。相对于我们平时看的碎片化内容这份笔记的知识点更系统化更容易理解和记忆是严格按照知识体系编排的。全套视频资料一、面试合集二、源码解析合集三、开源框架合集欢迎大家一键三连支持若需要文中资料直接点击文末CSDN官方认证微信卡片免费领取↓↓↓
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻