Flutter 3.35 现已发布。本次更新旨在提升用户工作效率,并带来了稳定版的 Web 状态热重载(hot reload)和实验性的 Widget Previews 功能。
Web
Web 上的状态热重载现已默认启用
从 3.35 开始,Flutter Web 将默认启动热重载。“我们的目标是在所有平台上提供无缝且一致的热重载体验。虽然你仍然可以使用 flag 禁用此功能,但我们计划在未来的版本中移除此功能。”
Wasm dry runs
为了将 WebAssembly (Wasm) 作为 Web 的默认构建 target,现在每个 JS build 都会执行一次 Wasm 的 “dry run” 编译,它会通过一系列检查确定应用程序的 Wasm 适配情况,并将结果以警告形式发送到控制台,此功能可通过--(no-)wasm-dry-run
标志切换。
Framework
此版本带来了一系列改进,赋予开发者更多控制权,并优化了辅助技术用户的开箱即用体验。
在 Flutter Web 应用与屏幕阅读器及其他工具的通信方面取得了重大进展。针对国际用户新增了语义语言环境支持 ( #171196 ),确保无障碍功能能够以用户偏好的语言呈现。
新的SemanticsLabelBuilder
小部件 (#171683) 简化了将多个数据点组合成单一、连贯公告的过程,无需进行繁琐的字符串连接。对于复杂的可滚动视图,可以使用新的SliverEnsureSemantics
小部件(#166889)来包装 slivers,确保它们始终在语义树中表示,即使滚动出视图也是如此。
- 在 iOS 上,
CupertinoSliverNavigationBar
现在可以正确遵循可访问的文本缩放(#168866),并且 VoiceOver 选项卡激活行为现在可以正常工作(#170076)。 - 对于 Android,Talkback 问题现在可在使用平台视图 (#168939) 时解决,这对于嵌入本机组件的应用程序来说是一个关键的修复。
CustomPainter
(#168113)的语义属性现已填充支持,使用户能够使自定义绘制的 UI 完全可访问。- text selection toolbar 现在可正确对齐从右到左 (RTL) 的语言,从而改善体验 ( #169854 )。
Material 和 Cupertino
添加了全新的、备受要求的组件,并对现有组件进行了重大改进。
- 引入 DropdownMenuFormField(#163721):现在可以轻松地将 M3
DropdownMenu
直接集成到表单中。 - Scrollable NavigationRail(#169421):现在可以将
NavigationRail
配置为滚动。 - NavigationDrawer 页眉和页脚(#168005):现在可以向
NavigationDrawer
添加页眉和页脚,从而提供更多的布局灵活性。 - 引入 CupertinoExpansionTile(#165606):使用新的
CupertinoExpansionTile
小部件创建可扩展和可折叠的列表项。
此版本的一个关键主题是完善小部件:
- 许多 Cupertino 小部件已更新为使用
RSuperellipse
形状 ( #167784 ),为它们提供 iOS 用户期望的标志性连续角外观。 - 为了让应用程序感觉更生动、更原生,为关键交互组件(如
CupertinoPicker
(#170641)和CupertinoSlider
(#167362))添加了触觉反馈。 - 现在可以将的
Slider
值指示器配置为始终可见(#162223)。
此外,对于构建复杂滚动的场景,现在可以明确控制 slivers 的绘制顺序(或 z 顺序)( #164818),从而可实现高级效果,例如与其他 slivers 重叠的“粘性”标题,而不会出现视觉故障。
添加了几个新功能,让用户可以更好地控制应用程序的 navigation 和 routing。
- 全屏对话框 ( #167794 ):ModalRoute(及其所有后代)和
showDialog
都新增了fullscreenDialog
属性,允许自定义对话框路由的 navigation 行为 - 表单改进(#167060):
FormField
现在包含一个 onReset 回调,使得处理表单清除逻辑变得更加容易。
多窗口支持(引擎)
Canonical 的朋友们在添加多窗口应用程序支持方面继续取得卓越进展。在此版本中,他们实现了在 Windows 和 macOS 中创建和更新窗口的基础逻辑 ( #168728 )。后续版本将更新 Linux 系统,并引入实验性 API 以支持多窗口功能。
文本输入和选择改进
- 更加统一的手势系统:
PositionedGestureDetails
接口的引入(#160714)统一了所有 pointer-based的手势的细节,并允许用户编写更通用的手势处理代码。 - iOS single-line scrolling(#162841):为了更好地与原生 iOS 行为保持一致,用户不再可滚动单行文本字段。
Android home/end 键支持(#168184):添加了对 Android 上的Home
和End
键盘快捷键的支持。
展望:解耦 Flutter 的设计库
随着 Flutter 生态系统的不断发展和成熟,核心框架也必须随之发展。其中,关键在于确保 Flutter 的各个部分都能以最能服务社区的速度不断发展。为此,项目团队正在着手将 Material 和 Cupertino 库从 Flutter 核心框架中移出,并将它们放入各自的独立包中。
iOS
官方正在积极优化 Flutter 与 iOS 26 测试版]的兼容性。
Android
在 Android 上,从 3.35 开始可以在 Flutter 应用中使用 SensitiveContent ,在媒体投影期间保护敏感的用户内容,在 API 35 及更高版本中,可以使用该控件在屏幕共享期间遮挡整个屏幕,从而帮助防止数据被盗。
Engine
3.35 版本继续专注于提升 Impeller 的性能和兼容性。此外还投入了大量资金以支持 iOS 平台的UISceneDelegate
接口,并引入了其他工具改进。
更多详情可查看官方公告。
还没有评论,来说两句吧...