文章摘要
Flutter 3.47发布,带来重大更新:Material和Cupertino设计系统作为独立包发布1.0版本,实现与核心SDK解耦;Impeller渲染器在桌面端默认启用;Flutter Widget预览功能稳定。
文章总结
好的,这是根据您的要求,对原文主要内容进行的中文重述,保留了关键细节,并删减了与主题无关的冗余内容。
Flutter 3.47 新特性概览
Flutter 3.47 版本正式发布,带来了一系列激动人心的更新,重点包括设计系统解耦、性能提升以及对苹果新平台的适配。
核心更新:Material 和 Cupertino 独立成包
这是本版本最重要的里程碑。material_ui 和 cupertino_ui 作为独立的 1.0 版本包发布在 pub.dev 上。这意味着 Material 和 Cupertino 设计系统已从 Flutter 核心 SDK 中解耦。
好处: * 更快的更新节奏: 这些独立包可以按周发布新组件和修复,无需等待 Flutter 季度大版本更新。 * 更灵活的升级: 你可以单独更新 UI 组件库,而无需强制升级整个 Flutter SDK。 * 为未来奠基: 为构建风格中立的 Flutter 核心组件库和自定义设计系统铺平了道路。
如何迁移:
运行命令 dart fix --apply --code=migrate_design_widgets 即可自动更新项目中的导入路径。如果遇到问题,可手动运行 flutter pub add material_ui 后再执行上述命令。原有的核心库计划在11月的稳定版中正式弃用。
兼容性桥接:
为了帮助生态平稳过渡,新包提供了 MaterialUiCompatibilityBridge,允许你的应用立即迁移到独立包,即使部分依赖仍在使用旧的核心库导入。
本地化也解耦了:
flutter_localizations 包也被解绑。Material 和 Cupertino 的本地化委托和翻译字符串已分别移入 package:material_ui 和 package:cupertino_ui。现在只需设置 localizationsDelegates: GlobalMaterialLocalizations.delegates 即可包含所有委托。
为苹果新系统做准备
为迎接 Xcode 27、iOS 27 和 macOS 27,Flutter 3.47 进行了重点适配。
* 最低系统版本提升: iOS 最低版本提升至 15,macOS 提升至 12。
* 强制 UIScene 生命周期: iOS 27 SDK 强制要求使用 UIScene 生命周期。Flutter CLI 在构建时会自动处理大部分迁移,但如果你有自定义原生代码或使用了旧版生命周期的插件,则需要手动迁移。
* 逐步淘汰 Intel Mac: Flutter 正在减少对 Intel Mac 的支持,并会在未来版本中将警告升级为错误。你可以通过 flutter config --enable-macos-arm64-only 立即构建仅支持 ARM64 的 macOS 应用。
* Swift Package Manager 进展: 社区在向 Swift Package Manager 迁移方面取得了巨大进展,前100个 iOS 插件中已有92个完成迁移。未迁移的插件将逐渐失效。
桌面端:Impeller 渲染器成为默认
在 Flutter 3.47 中,Impeller 已成为 macOS、Windows 和 Linux 的默认渲染器。它通过预编译着色器,消除了动画首次播放时的“着色器编译卡顿”,带来更流畅的体验。如需临时回退,可按平台进行配置,但回退选项将在未来版本中移除。此外,macOS 上的广色域显示功能现已默认开启。
实验性多窗口支持:
Linux 和 Windows 现在支持弹出窗口,可用于构建原生上下文菜单。同时,新增了 windowHandle API 用于获取原生窗口指针,以及一个根据内容自动调整窗口大小的 API。
桌面端 Flavors 支持: Windows 和 Linux 现在也支持 Flutter 的 flavors 功能,允许为不同构建变体使用不同的资源。
更清晰的桌面文本: 在桌面端使用 Impeller 时,引擎采用了 SDF(有符号距离函数)渲染技术,以提供更清晰的文字和更平滑的矢量曲线。
Web端:向 Wasm 默认启用迈进
Flutter 正积极推动 WebAssembly (Wasm) 成为 Web 应用的默认选项。你可以通过 flutter build web --release --wasm 命令立即体验。本版本还实验性地支持了 Wasm 的延迟加载,通过 --enable-wasm-deferred-loading 标志,可以将应用拆分为更小的模块,优化初始加载时间。
其他重要更新
- Widget Previews 稳定版: Flutter Widget 预览功能现已稳定,允许在不构建和启动整个应用的情况下,即时渲染和迭代单个 UI 组件。
- GenUI 持续进化:
genui包发布了 0.10.0 版本,带来了新的a2ui_core包和对 A2UI 客户端函数的支持。 - 平台体验优化:
- Android: 修复了虚拟键盘修饰键卡住的问题,并更新了依赖版本矩阵(Java 17, KGP 2.4.0, AGP 9.1.0, Gradle 9.3.1)。
- iOS/macOS: 代码签名信息显示更透明,错误提示更清晰。
- 桌面端: 修复了 Windows 上韩文文本的光标定位问题,Linux 新增了对触控笔旋转和压力的支持。
- 引擎: 针对 OpenGLES 的片段着色器不再需要条件坐标翻转。
- 框架: 改进了无障碍支持(自动检测 Android 高对比度和颜色反转设置)、文本选择(修复了选择手柄遮挡菜单等问题)、手势和滚动(
EdgeDraggingAutoScroller现在会遵循ScrollPhysics)以及核心组件(ImageIcon支持保留原始颜色等)。
如何升级
在终端中运行 flutter upgrade 即可升级。建议查看官方的“Breaking Changes”页面,为独立 UI 包的迁移做好准备。
评论总结
根据评论内容,总结主要观点如下:
1. 对Flutter/Dart的生存与前景的质疑(评分:无) - 评论1:质疑Google为何保留Flutter/Dart,认为其支持薄弱、愿景模糊("I just don’t understand why Google keeps these limping along with weak support and no clear vision") - 评论7:警告Flutter可能被Google放弃,尤其JetBrains的Compose Multiplatform和Android团队转向Compose策略("it’s a matter of time before they kill it")
2. 对Flutter技术特性的评价(评分:无) - 正面:多窗口支持(评论5、8)、Material/Cupertino解耦(评论2)、Impeller引擎进展(评论4)、WASM支持(评论4、11) - 负面:UI代码嵌套括号过多(评论3)、桌面端动画卡顿(评论13)、浏览器端性能差(评论6)、多窗口支持来得太晚(评论7)
3. 与React Native的对比(评分:无) - 评论15详细对比:RN在语言生态(TypeScript)、平台模型、性能、生态系统、平台特性支持、迁移到原生方面更优;Flutter在跨平台一致性上有优势("Flutter has improved a lot, and for teams that want a highly consistent cross-platform UI, its rendering model can be an advantage")
4. 对Dart语言的讨论(评分:无) - 评论9质疑为何不用Go或TypeScript("Why use a new language?") - 评论10询问Dart在后端开发中的使用情况
5. 整体评价(评分:无) - 评论12:Flutter快速上手,跨平台代码库优势明显("one codebase is hard to beat") - 评论14:质疑Flutter和React Native是否仍可行,更多人转向原生、KMP或PWA
平衡总结: 评论呈现明显分歧。支持者认可Flutter的跨平台一致性、快速开发和多窗口等新特性;批评者担忧Google的长期支持、技术缺陷(嵌套代码、性能问题)以及React Native等替代方案的生态优势。整体上,Flutter在移动端表现较好,桌面端和浏览器端仍有改进空间。