第16章 Material 和 Cupertino 从 Flutter 核心库解耦落地
第16章:Material 和 Cupertino 解耦落地
Material 和 Cupertino 从 Flutter 核心库中剥离,此举将加速修复进程与新功能开发
Craig Labenz 2026年9月9日 · 4分钟阅读
分享
Flutter 一直是一个“开箱即用”的框架,拥有出色的工具链、设计系统和动画。但电池总有耗尽的一天,因此具备按需更换它们的能力至关重要。2017年 Flutter 趋于成熟时,将 Material 和 Cupertino 提升进框架被广泛认为是正确决策。但时移势易,到了2020年代,Material 和 Cupertino 电池感觉已不是“附带”,而是“焊死”在框架上了。多年来,开发者最强烈的诉求之一就是改进这一系统。如今,在2026年,实现这一愿望的漫长过程终于结出了硕果。
正在做的事情
从几个月前开始,并于2026年8月落地,这一举措冻结了对 Flutter 框架内部 Material 和 Cupertino 库的代码贡献,并在 pub.dev 上发布了它们的精确副本作为 pkg:material_ui 和 pkg:cupertino_ui 的 1.0.0 版本。(这些外部库并未冻结,欢迎贡献代码!)随后,在特定时间点,该举措将通过弃用并最终从 Flutter 框架中移除 Material 和 Cupertino 库来完成。
暂停其他工作以完成此次迁移的原因有很多,以下几点是部分说明。
降低 Flutter 升级的摩擦
多年来,为了获取安全补丁和其他修复而升级 Flutter 时,不可避免地包含 Material 或 Cupertino UI 的更新。无需多言,这是导致许多团队滞留在旧版本 Flutter 上的主要摩擦源。这也意味着,当团队终于启动升级时,任务可能耗费数周的开发者精力,并在团队处理 UI 变更时成为整个仓库的瓶颈。
现在,随着 Material 和 Cupertino 库迁移至核心框架之外,我们预计更新 Flutter 将回归其应有的简单形态——仅在底层平台变更需要开发者关注时才会变得复杂。
加速 Material 和 Cupertino 的进展
Flutter 每3个月发布一个新的稳定版,对于该项目规模而言已是相当快的节奏。然而,即便如此,最坏的情况(代码在稳定版发布截止前一分钟才合并)仍会导致16周的延迟,直到该变更出现在稳定版中。这……并非好事。
拆分到 pkg:material_ui 和 pkg:cupertino_ui 独立包后,现在可以按独立的每周节奏发布。这使得 CI 流程更简单,也更容易贡献,尤其对于不熟悉 Flutter 内部实现的人来说。
基于此,我们预计 Material 和 Cupertino 将加速开发进度,并更好地跟上 Google 和 Apple 设计语言的更新。例如,针对 Liquid Glass 和 Material 3 Expressive 的官方实现工作已在进行中。我们正与软件包作者社区合作,确保 Flutter 中这些库的实现具备最佳的质量和兼容性。
强化基础 Widget
提升 Material 和 Cupertino 库地位的一个意外后果是,这使得在这些设计库中构建基础功能变得过于诱人。两者在技术上虽然都构建在基础 widgets 库之上,但 widgets 库本身在基础 UI 概念上充满了漏洞和不足。
为了修正这一点,解耦工作的一部分将填补 widgets 库的空白,提供更坚实的基础,让开发者可以在此之上构建其他设计语言。Flutter 生态系统已支持多种设计语言,包括 macos_ui、fluent_ui、yaru、arna、chicago、VSP、shadcn 等。长远来看,希望通过增强 Flutter 核心 widgets,提供更多有用的构建块来简化这一任务。
不做什么
pub.dev 上的 material_ui 和 cupertino_ui 包将继续获得 Flutter 团队同等程度的关注,自2026年8月13日起,已向所有 Flutter 开发者开放贡献。虽然 Flutter 团队资源有限,有时不得不做出艰难选择并降低某些计划的优先级,但此次解耦并非如此。Flutter 团队承诺将持续维护优质的 Material 和 Cupertino 组件,以确保您的 Flutter 应用在您面向的所有平台上保持现代感和地道风格。
展望未来
所有活过12年的项目都会有技术债务。目标并非完全避免债务,而是识别债务并腾出时间和精力去偿还它。对于 Flutter 团队而言,解决上述问题早已在愿望清单上。我们很兴奋能最终向所有开发者提供 smoother 的升级体验、更快的创新以及更强大的核心 widgets 库。
若要开始迁移,如果你的应用使用了 flutter/material.dart 或 flutter/cupertino.dart,请使用 dart fix 命令在 pubspec.yaml 文件中以 1.0.0 版本添加新的独立库,并替换你的导入以使用新软件包。我们预期这将是一个无缝替换操作,但如果遇到任何问题,请提交 Issue。
如果你是熟悉 Material 或 Cupertino 的 UI 开发者,请考虑为这些独立库做贡献!一如既往,我们建议你寻找感兴趣的 Issue,或者为你想要完成的工作提交功能请求。
下回见,祝 Flutter 愉快!
注释:
为了简化迁移,我们特意选择了 1.0.0 版本来标记独立版本,使其与各库在框架内的状态完美匹配。后续,这些库将采用语义化版本控制进行演进。 ↩
来自 Flutter 的更多文章
Announcing Genkit Dart 1.0: Build production-ready agentic apps with Dart and Flutter 发布 Genkit Dart 1.0 稳定版,这是一个使用 Dart 和 Flutter 构建 AI 驱动功能和代理工作流的开源框架。 Chris Gill 2026年10月8日 · 6分钟阅读
Try Flutter Web with WebAssembly Week 今天通过选择 Wasm 编译,解锁高达2倍至5倍更快的 Web 性能 Kevin Moore 2026年8月17日 · 4分钟阅读