在2025年8月发布的Flutter 3.35版本中,Google为跨平台开发领域带来了多项重要更新。这个版本虽然在表面上是常规的季度更新,但实际上包含了一系列能够显著提升开发者效率的改进。从Web端有状态热重载的稳定支持,到实验性Widget Preview功能的引入,再到多窗口支持的实质性进展,Flutter 3.35在多个维度上都实现了重要突破。
一、Web开发体验的重大提升
1.1 有状态热重载默认启用
Flutter 3.35最令人振奋的改进之一是Web端有状态热重载功能的稳定化。从现在开始,当开发者运行Flutter Web应用时,有状态热重载功能已经默认启用,无需再通过--web-experimental-hot-reload标志手动开启。
这一改进意味着开发者可以实时查看代码更改效果而无需重启整个应用。无论是调整颜色、修改布局还是修复逻辑错误,更改都会立即反映在浏览器中,同时保持应用的当前状态。对于主要专注于Web应用的Flutter开发团队来说,这一功能将开发效率提升了约30%以上,使Web开发体验终于达到了移动端水平。
对于那些因特定开发环境需要暂时禁用此功能的用户,仍然可以通过--no-web-experimental-hot-reload标志关闭热重载。
1.2 WebAssembly准备工作
Flutter团队正在为将WebAssembly(Wasm)作为默认Web构建目标积极准备。在3.35版本中,每个JS构建都会自动执行一次Wasm的”dry run”编译。
这一预处理步骤会执行一系列检查,评估应用程序的Wasm适配情况,并将发现的问题以警告形式输出到控制台。开发者可以使用--(no-)wasm-dry-run标志控制这一功能。这表明Flutter在Web技术路线图上已经明确将Wasm作为未来方向,为更高性能的Web应用铺平道路。
1.3 无障碍功能改进
Flutter 3.35在Web无障碍功能方面也取得了显著进展。新增的语义化语言环境支持(#171196)确保无障碍功能可以针对用户偏好的语言进行优化,为国际用户提供更友好的体验。
同时,Flutter Web应用与屏幕阅读器及其他辅助工具的通信能力得到增强,进一步提升了Web应用的可访问性。
二、框架功能强化与组件更新
2.1 强大的Slivers绘制顺序控制
对于需要创建复杂滚动效果的开发者来说,Flutter 3.35引入了显式控制Slivers绘制顺序(或z顺序)的能力(#164818)。这一功能使得实现高级视觉效果(如与其他slivers重叠的”粘性”标题)成为可能,且不会出现视觉故障。
在实际应用中,这一特性特别适用于电商和社交类应用,例如实现商品图片在滚动时”钻进”导航栏下方,而评论区域又能浮在图片上方的层次分明效果。开发者现在可以通过CustomScrollView的paintOrder属性精确控制绘制顺序,无需再依赖复杂的Stack嵌套和定位计算。
CustomScrollView(
paintOrder: SliverPaintOrder.lastIsTop,
center: const ValueKey<int>(2),
anchor: 0.5,
slivers: List<Widget>.generate(5, makeSliver),
)
2.2 新增与改进的组件
Flutter 3.35在Material和Cupertino组件库中增加了多个实用组件:
- DropdownMenuFormField(#163721):将M3效果的DropdownMenu直接集成到表单中
- Scrollable NavigationRail:可将NavigationRail配置为滚动模式,应对目的地数量超过屏幕显示范围的情况
- NavigationDrawer页眉和页脚:为NavigationDrawer添加页眉和页脚,提供更大的布局灵活性
- CupertinoExpansionTile(#165606):创建可展开和可折叠的列表项
此外,许多Cupertino组件已更新为使用RSuperellipse形状(#167784),提供iOS用户期望的标志性连续圆角外观。CupertinoPicker(#170641)和CupertinoSlider(#167362)等关键交互组件增加了触觉反馈,Slider的值指示器可以配置为始终可见(#162223)。
2.3 导航与表单增强
在导航方面,ModalRoute及其所有后代以及showDialog都新增了fullscreenDialog属性(#167794),允许自定义对话框路由的导航行为。
FormField现在包含一个onReset回调(#167060),使处理表单清除逻辑更加容易。这些改进为开发者提供了更细粒度的控制能力,有助于构建更符合特定需求的应用流程。
三、多窗口支持与桌面端进展
3.1 多窗口功能的基础实现
Flutter 3.35在多窗口支持方面取得了实质性进展。Canonical(Ubuntu开发商)团队已经实现了在Windows和macOS中创建和更新窗口的基础逻辑(#168728)。
虽然多窗口功能还没有正式发布,但底层展示机制已经具备了基础功能。这一更新对Flutter桌面应用开发意义重大,为未来创建更复杂的桌面应用奠定了基础。
预计在2025年下半年,开发者有望看到多窗口功能的正式发布。对于正在开发桌面应用的Flutter团队来说,现在可以开始考虑如何在应用架构中为多窗口功能预留空间,因为从单窗口到多窗口的转变不仅影响UI层面,更需要重新设计应用架构和状态管理。
3.2 文本输入与手势系统改进
Flutter 3.35对文本输入和手势系统进行了重要优化:
- 统一的手势系统:引入
PositionedGestureDetails接口(#160714)统一了所有基于指针的手势细节,使开发者能编写更通用的自定义手势处理代码 - iOS单行滚动行为改进(#162841):为更好地与原生iOS行为保持一致,单行文本字段不再可供用户滚动,用户需要拖动选择handle来进行滚动
- Android Home/End键支持(#168184):添加了对Android上Home和End键盘快捷键的支持
这些改进使Flutter应用在不同平台上具有更一致的原生体验,减少了平台特定行为带来的差异。
四、开发工具与效率提升
4.1 实验性Widget Preview功能
Flutter 3.35引入了实验性Widget Preview功能,允许开发者在完全独立于完整应用的沙盒环境中可视化和测试Widget。这一功能在构建设计系统或跨多种配置(如各种屏幕尺寸、主题和文本比例)测试组件时特别有用。
使用Widget Preview很简单,开发者只需添加@Preview注解到普通函数或构造函数上,然后执行flutter widget-preview start即可运行预览:
@Preview(name: 'Top-level preview')
Widget preview() => const Text('Foo');
class MyWidget extends StatelessWidget {
@Preview(name: 'Constructor preview')
const MyWidget.preview({super.key});
@override
Widget build(BuildContext context) {
return const Text('MyWidget');
}
}
虽然目前还是实验性功能,但Widget Preview代表了Flutter开发体验的重要进步,使开发者能够更快速地迭代和测试UI组件,而无需启动完整应用。
4.2 Dart和Flutter MCP Server稳定发布
Dart和Flutter MCP(Model Context Protocol)Server已在Dart SDK稳定通道中发布。这一功能将AI编码助手从简单的”代码补全工具”提升为真正的”开发伙伴”,使AI能够安全地访问本地开发环境、工具和上下文。
通过MCP Server,AI助手可以:
- 检查实时Widget树,识别Flutter RenderFlex溢出并自动应用修复
- 在pub.dev上找到特定任务的最佳包,将其添加到pubspec.yaml并运行pub get
- 为新功能生成样板代码,并自行纠正引入的分析错误
开发者可以通过Gemini Code Assist、Firebase Studio、GitHub Copilot和Cursor等AI工具连接到Dart和Flutter MCP Server。这一集成标志着AI辅助开发的重要进步,使开发者能更专注于创意和架构设计,而AI处理具体实现细节。
4.3 分析服务器速度提升
使用Analysis Server的Dart命令行工具现在运行AOT编译的Analysis Server快照,这些命令包括dart analyze、dart fix和dart language-server。
各种测试表明,项目分析时间显著缩短:简短命令(如格式化)几乎可立即完成,而长时间运行的命令(如分析)速度提高了近50%。这一改进不仅使日常工具使用感觉更流畅,还可能对持续集成系统中运行的常见测试工作流程产生重大影响。
五、平台特定改进与性能优化
5.1 Android平台增强
在Android平台上,Flutter 3.35引入了敏感内容保护功能,开发者可以在Flutter应用中使用SensitiveContent小部件保护媒体投影期间的敏感用户内容。在API 35及更高版本中,可使用该控件在屏幕共享期间遮挡整个屏幕,帮助防止数据被盗。
此外,模板项目已迁移至Android 24,修复了Android 14及更早版本中背景图像读取器导致的崩溃问题。OpenGLES Impeller的片段着色器中的uniform数组和颠倒的片段着色器通道问题也得到了修复。
5.2 iOS平台兼容性改进
针对iOS 26测试版,Flutter团队正在积极优化兼容性。由于iOS对JIT的全面禁止,官方正在开发基于devicectl和LLDB的全新JIT和hotload适配支持。
具体来说,Flutter工具将通过lldb进程的标准输入(stdin)流和输出(stdout)流发送预设命令,实现附加进程和连接debugserver等功能。这一改进将确保Flutter在未来的iOS版本上继续保持良好的开发体验。
5.3 Impeller引擎优化
Flutter 3.35继续专注于提升Impeller渲染引擎的性能和兼容性。本版本中的优化包括:
- 从中间目标中删除MSAA
- 删除有损纹理压缩默认值
- 修复后续绘制中卡住的MaskFilter问题
- 优化路径渲染并添加Vivante GPU支持
- 优化DrawImageNine使用快速Porter Duff混合
- 修复VideoPlayer中的内存泄漏问题
- 改进模糊半径计算,获得具有较大sigma的更清晰模糊效果
虽然这些优化看似是”例行公事”,但对于生产环境应用来说,这种稳扎稳打的策略比激进的新功能更有价值,因为它提高了应用在边缘情况下的稳定性和动画流畅度。
六、重大变更与未来方向
6.1 破坏性变更与弃用
Flutter 3.35包含一些重大变更和弃用,旨在使框架更加简洁高效:
- 主题组件重构:为了使主题更加一致,AppBarTheme、BottomAppBarTheme和InputDecorationTheme等组件主题已重构,基于新的面向数据的ThemeData类型
- Radio组件重新设计:Radio、CupertinoRadio和RadioListTile已重新设计以优化无障碍功能,groupValue和onChanged已弃用,由新的RadioGroup Widget替代
- Form组件限制:Form不再能够直接用作Sliver,要将Form包含在CustomScrollView中,需要将其包装在SliverToBoxAdapter内
- 语义属性移除:SemanticsConfiguration和SemanticsNode上的elevation和thickness属性已被移除
此外,Flutter 3.35将弃用3.13之前的Flutter SDK IDE支持,在下一个稳定版本中3.16之前的Flutter SDK将被弃用。Android上已弃用32位x86架构,最低支持SDK版本为API 24(Android 7)。
6.2 设计库解耦计划
Flutter团队宣布了将Material和Cupertino库从核心框架中移出的计划,将它们作为独立包维护。这一变化将使设计库能够更频繁地创新和更新,不再受Flutter季度发布周期的限制。
对于核心框架而言,这一变化将带来更专注和稳定的基础,同时使社区能更直接地参与日常使用的UI库开发。虽然这一工作刚刚开始,但代表了Flutter生态系统成熟的自然演进过程。
七、总结
Flutter 3.35作为一个看似常规的季度更新,实际上包含了多项对开发者体验有实质性提升的功能。从Web端有状态热重载的稳定支持,到实验性Widget Preview功能的引入,再到多窗口支持的实质性进展,这个版本在多个维度上都为Flutter开发带来了效率提升。
最令人印象深刻的是,Flutter团队不仅在完善框架核心功能,还在积极拥抱AI辅助开发等新兴趋势,通过Dart和Flutter MCP Server等功能将开发体验推向新高度。同时,设计库解耦等长远规划表明团队对生态系统发展的深思熟虑。
虽然这个版本没有引人注目的全新功能,但对现有系统的实质性改进和未来发展的清晰规划,使Flutter 3.35成为框架成熟度的重要里程碑。对于Flutter开发者来说,现在正是探索和采用这些新功能的最佳时机,为构建更高质量、更易维护的跨平台应用奠定基础。
若内容若侵犯到您的权益,请发送邮件至:platform_service@jienda.com我们将第一时间处理!
所有资源仅限于参考和学习,版权归JienDa作者所有,更多请访问JienDa首页。





