虽然 Flutter 3.44 的版本已经发布两天了但是今天才是真正的官宣 Flutter 3.44 发布哦3.44 虽然看起来版本号不大但是这确实是一个超级大版本更新。也不知道为什么 Flutter 对于 3.x 这个版本号这么热爱就和 RN 热爱 0.x 一样。这次 3.44 核心包括Android HC 功能落地、iOS/MacOS 默认使用 Swift PM、多窗口功能落地、Material 和 Cupertino 解耦、各种 AI 场景支持、Widget Previewer 更新和各种功能优化。首先还是按照惯例Flutter 先公布了近期的一些数据情况其中pub.dev 在过去 30 天内 Package 下载量超过 13 亿次 Flutter 两大应用商店下月活开发者超过 150 万 一年内增长了 50%。这算是惯例对于 「Flutter 凉了没」的回覆。工具更新Widget Previewer虽然我基本没怎么用过但是 Flutter 官方一直很热衷 Widget Previewer 的优化这次主要有两个内容预览检测的逻辑重写了使用 analysis server 做 widget preview detection降低了 Flutter 工具的内存占用对于 IDE 用户而言整体内存占用最多可降低 50%自定义 preview annotation 支持 collections 和 records现在可以按组、名称、脚本和包 URI 筛选预览3.44 的 Previewer 其实就是接入了更底层的 analysis server 检测链路主要涉及IDE 能准确知道哪些函数、构造器、静态方法可以 previewPreviewer 要能处理真实项目里的 wrapper、theme、localization、状态注入依赖真实 analyzer 级别的语义信息可以看出来官方对于 Widget Previewer 很重视大概在 AI 时代Widget Previewer 可以在开发过程中有不错的事实预览效果。不需要 Rosetta这个我们提前聊过在之前的 《Flutter iOS 又修复了一个构建问题》 就提到过以前 Flutter 本身的构建工具还是需要 Rosetta 进行适配支持这次所有的 macOS 命令行工具都已经通过Fat Binary从而同时支持x86_64和arm64两种架构。因为下个版本 Rosetta 就要开始推出历史舞台了所以这也算事一个重要的跟进升级当然这个能力的 PR 的过程很抽象没看过的可以了解下是真的草台。。。。AIFlutter 官方真的很热衷跟进各种 AI 能力而且跟进的贼快。Agentic Hot Reload3.44 官方推出了全新的 Agentic Hot Reload 功能Flutter 在 AI 支持能力上一直很热衷这次的 Agentic Hot Reload 也是。从 3.44 开始一些 MCP 服务器和 Coding Agnet 支持自动查找并连接到正在运行的 Flutter App也就是类似 Antigravity 这样的 Coding Agnet 可以支持使用 Hot Reload 同时还有配置前面的 Previewer 整体 AI 开发体验会更好。另外Agent 现在可以通过服务直接读取本地 pub 包依赖不需要去取搜索本地 pub 缓存同时 MCP 相关的 Tools 也得到了更新。实际上这个能力以前也能做到AI 通过命令行的r输入也可以但是这次的是让 agent 有官方路径去发现运行中的 Flutter sessionagent 可以知道是哪个 App 正在运行因为是一整套的 MCP 协议支持。Skills关于 skills 在不久前我们也刚聊过《新 Flutter Dart Agent Skills 深度解读》 现在官方的 skills 都是“任务导向型”的 Skills每个 Skill 都不是在描述一个功能或者说明一个文档而是在提供一套决策逻辑让 AI 可以通过明确指令来解决问题并且提供对应的 反馈循环Feedback Loop。每个技 Skill 的结果都需要做检验类似flutter-fix-layout-issues、flutter-add-widget-test、flutter-add-integration-test、flutter-build-responsive-layout、flutter-setup-localization、flutter-implement-json-serialization、flutter-add-widget-preview、dart-fix-runtime-errors、dart-use-pattern-matching都是很实用的技能。Genkit Dart关于 GenKit 我们之前也一样在 《谷歌 Genkit Dart 正式发布》 聊过基于Genkit 可以构建全栈式 AI 驱动的智能体应用Flutter 使用 Dart 可以直接原生实现 AI 编排框架支持不同模型和本地场景提供 agent workflow / tool calling / RAG 等能力。通过 Genkit Dart 你可以实现一整套的 Agent 的服务端和客户端能力支持 Google、Anthropic 、 OpenAI 甚至本地模型的能力包括类型安全的结构化输出、工具调用、多轮对话和内置的可观测性能力等等。import package:genkit/genkit.dart; import package:genkit_google_genai/genkit_google_genai.dart; void main() async { final ai Genkit(plugins: [googleAI()]); final response await ai.generate( model: googleAI.gemini(gemini-flash-latest), prompt: Why is Dart a great language for AI applications?, ); print(response.text); }Gemma 4Flutter 也支持直接跑 Gemma 4 本地模型通过flutter_gemma插件App 可以和 Gemma 深度集成插件底层支持 LiteRT-LM 支持 GPU 和 NPU 加速最重要是支持全平台 GenUI这个大家应该也不陌生吧我们在 《Flutter GenUI 0.9 和 A2UI 0.9 发布》 才刚刚聊过官方表示Flutter A2UI GenUI作为基于 AI 的生成式 UI 支持Flutter 算是在 A2UI 领域最早的支持项目之一它提供了一套完整的协议实现可以让 Agent 在 App 运行中动态生成控件客户端不需要开发一个完整的页面功能开发者只需要维护组建库剩下的都交给 AI 。官方统计自从推出 Flutter GenUI SDK 以来软件包下载量自年初以来增长了 500%。官方特别提到了Catagay Ulusoy开发的Finnish it 可在 Google Play 商店和 Apple Store 下载 例子这款应用不仅能为用户创建定制化的课程计划来学习芬兰语还能根据每节课的需要动态生成完美的界面另外还有官方提供的 Demo 也分享了 DeepMind 使用 Flutter 构建 Gemini App “可视化布局”的效果 Android首先就是 Googlebook 支持我都还没用上Flutter 就宣布了 Googlebook 已经适配完成核心是适配了 Gemini 处理器的全新 Googlebook 笔记本电脑不过具体支持的如何还需要看真的发布后才知道。另外还有 Android 17 的适配 Flutter 3.44 也正在完成 Android 17 的适配包括本地网络保护和安全动态代码加载等场景 。Hybrid Composition另外还有一个重点就是 Hybrid Composition 终于落地了这个我们再去年的 《Flutter 正在推进全新 PlatformView 实现 HCPP》 就提到过这是一套全新的 PlatformView 实现可以提供更好的 PlatformView 新能HCPP 不再依赖屏幕外缓冲区或强制 Flutter 引擎处理原生视图而是将图层合成直接委托给 Android 本地然后利用 Vulkan 图形库的底层访问能力通过硬件缓冲区交换链和SurfaceControl事务将 Flutter UI 与原生 Android 视图同步。简单来说就是HCPP 主要就是通过SurfaceControl来构造一个高层级的Surface从而实现最终绘制时混合覆盖的问题这和 《深入 Flutter 和 Compose 的 PlatformView 实现对比》 里 Compose 可以在 PlatformView 里直接使用SurfaceView的道理类似都是SurfaceFlinger合成时的层级操作。只是需要 Vulkan 和 API 34 的环境才支持使用。所以 HCPP 对 Android API 和硬件有一定要求 可以通过在run中添加--enable-hcpp或者在AndroidManifest.xml文件中添加相应的配置标志来启用meta-data android:nameio.flutter.embedding.android.EnableHcpp android:valuetrue /Android 显示屏圆角Android 设备圆角支持PredictiveBackPageTransitionsBuilder新增对MediaQuery.displayCornerRadiiOf(context)的使用。简单说Android 设备真实屏幕圆角可以参与页面返回转场的裁剪效果让转场更贴合物理设备边界。如果你的应用自己覆盖了 Android 页面转场可以显式使用这个 builder设备圆角会由MediaQuery.displayCornerRadiiOf(context)自动参与裁剪拿不到设备圆角时走 fallbackMaterialApp( theme: ThemeData( pageTransitionsTheme: const PageTransitionsTheme( builders: TargetPlatform, PageTransitionsBuilder{ TargetPlatform.android: PredictiveBackPageTransitionsBuilder( fallbackColor: Colors.black, ), }, ), ), home: const HomePage(), )AGP 9 和 built-in Kotlin在 AGP 9 版本之前Android 应用和插件需要手动将 Kotlin Gradle 插件 (KGP) 添加到构建文件系统才能识别并编译 Kotlin 代码。从 AGP 9.0 开始Android 构建系统已原生支持 Kotlin由于构建系统已经处理了 Kotlin手动添加单独的 KGP 会导致冲突并造成构建失败所以这个情况需要 Flutter 进行适配所以如果你是开发 Flutter App这里需要更新 Android 构建文件删除单独的 Kotlin Gradle 插件 (KGP)如果是插件的话就需要对 Gradle 进行修改兼容设置 AGP 9.0 的插件必须pubspec.yaml里将 Flutter 的最低版本限制设置为 3.44 。这个问题主要还是 AGP 和 Kotlin 的破坏性更新带来的以前 Flutter Android 项目里常见的是plugins { id com.android.application id kotlin-android }或者老写法apply plugin: com.android.application apply plugin: kotlin-android而到了 AGP 9.0Android Gradle Plugin 自己内置了 Kotlin 支持同时默认启用也就是说普通 Android app/library 模块里不再需要显式 applyorg.jetbrains.kotlin.android或kotlin-android插件。Google 官方说法是AGP 9.0 introduces built-in Kotlin support and enables it by default不再需要 applyorg.jetbrains.kotlin.android/kotlin-android来编译 Kotlin 源码。所以迁移后的 Flutter Android app 大致会从plugins { id com.android.application id kotlin-android id dev.flutter.flutter-gradle-plugin } android { kotlinOptions { jvmTarget JavaVersion.VERSION_17.toString() } }变成plugins { id com.android.application id dev.flutter.flutter-gradle-plugin } android { // ... } kotlin { compilerOptions { jvmTarget org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } }也就是删掉kotlin-android删掉android { kotlinOptions {} }改用顶层kotlin { compilerOptions {} }。Flutter 3.44 也不是强行让所有项目马上完全迁到 AGP 9 built-in Kotlin所以也加了两个 flag 做缓冲android.newDslfalse android.builtInKotlinfalse而为了支持还没迁移的项目Flutter 默认使用 legacy Kotlin Gradle Plugin 和 old AGP DSL typesFlutter migrator 会自动把这两个 flag 加到gradle.properties。ABIFlutter 之前的做法是帮你按构建类型动态塞 ABI 过滤器现在改成「在defaultConfig里统一塞一次」这个变化也是遇到 AGP 9 的合并规则后。以前一般是flutter build apk --target-platform android-arm64或者flutter build apk --split-per-abi而现在为了 AGP9 Flutter 把 ABI filter 放到了defaultConfigandroid { defaultConfig { ndk { abiFilters ... } } }所以如果在特定构建类型或产品风格中使用自定义abiFilters现在需要在构建或运行应用时传递-Pdisable-abi-filteringtrue标志。iOSSwift PM 默认这个我们其实也已经在 《Flutter 3.44 发布前夕官方宣布 SwiftPM 将完全取代 CocoaPods》 聊过从 Flutter 3.44 开始Swift Package Manager 成为是 iOS/macOS 的默认包管理器 同时这个包含了大量SwiftPM 的修复例如CocoaPods 与 SwiftPM 冲突提示、SwiftPM 最低平台版本诊断、SwiftPM 下载太慢的慢提示、SwiftPM cache 集中化处理、SwiftPM Add-to-App 工具等。现在 Flutter CLI 会自动处理迁移。构建或运行应用时CLI 会将 Xcode 项目更新为使用 SwiftPM如果依赖暂时不支持 SwiftPMFlutter 会 fallback 到 CocoaPods同时发出警告。如果在 add-to-app 场景下新的flutter build swift-package也会支持对应命令如果 SwiftPM 是在无法兼容页可以通过在pubspec.yaml文件中设置--enable-swift-package-manager: false来回退禁用。UIScene由于 Apple 已经强制了 UIScene 要求所以这里是想提醒你如果还么迁移适配那就要抓紧了。predictive text这是 iOS 上一个新的实验性支持TextField、CupertinoTextField、EditableText和TextInputConfiguration增加了enableInlinePrediction相关配置。也就是 iOS 文本输入接入 inline prediction 提供了 opt-in 配置并把配置从高层TextField传到底层 text input channelMaterial 风格输入框可以这样显式打开TextField( controller: titleController, enableInlinePrediction: true, textInputAction: TextInputAction.done, decoration: const InputDecoration( labelText: 标题, ), )Cupertino 风格输入框也有同名参数CupertinoTextField( controller: titleController, enableInlinePrediction: true, placeholder: 标题, textInputAction: TextInputAction.done, )默认功能是关闭的它目前只对 iOS 17 及以上的 inline predictive text 有用。Web这个版本主要都是一个简单优化例如支持prefers-reduced-motion也就是现在浏览器/系统说要“少动画”Flutter Web 能够适配然后 Web 还把这个偏好同步到 Flutter engine 的 accessibility 配置里让 Flutter 侧的disableAnimations/reduceMotion生效。另外现在 Flutter Web 表单错误能更快被屏幕阅读器读到也算是无障碍的一个优化。支持 iOS 26 Safari autofill Flutter Web 在 iOS 26 Safari 上不会再频繁销毁/重建用于 autofill 的隐藏 DOM form而是尽量复用同一个 form这样 Safari/密码管理器才能识别“这是一组连续的登录/注册表单字段”从而正常自动填充。DesktopFlutter 这次不装了直接宣布Canonical 将成为 Flutter Desktop 的主要维护者和战略合作伙伴这是什么意思就是 Desktop 完全交给 Canonical 维护和主导了。结果这次还是失望了虽然新增加了功能但是多窗口功能还是只仅在 master 可以用依然没有合并到 stable 。这次多窗口新增加了 Tooltips 、Popups 和 Dialogs 的落地同时 Linux 现在也支持了 content-sized 视图可以根据窗口内容动态调整窗口大小。另外这次更新里 showRawDialog / showDialog 可以走原生 dialog window 如果通过flutter config --enable-windowing启用了 windowing那么 dialog 会通过 windowing system 显示在自己的窗口中而不是当前窗口内的 modal overlay平台不支持时会 fallback 到普通 dialog route。其他还有_window.dart有了多类 controller 和 widgetRegularWindowController/RegularWindowDialogWindowController/DialogWindowTooltipWindowController/TooltipWindowPopupWindowController/PopupWindowSatelliteWindowController/SatelliteWindow嵌入式这里官方主要介绍了一些案件例如丰田的车机 RAV4 在 2025 年是全球最畅销的车型 而2026 款 RAV4 正在使用 Flutter 构建车机系统LG 的基于 Flutter 的 WebOS SDK 页要更新发布了webOS SDK 将包含对 Firebase、视频播放器、游戏手柄等插件的支持。Impeller3.44 版本包含多个 Vulkan 优化包括「更好的缓存内存管理」还有在丢帧情况下更高效的 GPU/CPU 同步使用 SDF 可以实现更清晰的圆圈这个圈我看了是真头晕。同时也改进了 Impeller 处理透视矩阵的方式修正了阴影和透视投影变换的渲染行为支持Get Uniform by Name API可以在着色器中按名称绑定 uniform 变量void setUp(ui.FragmentShader shader) { shader.getUniformFloat(foobar).set(1.234); }Framework解耦3.44 开始Material 和 Cupertino 就是独立的material_ui和cupertino_ui了而下个版本发布的时候框架内当前兼容的样式框就会被完全弃用兼容整整 60 多万行代码的 PR 弹框这次新增的CupertinoMenuAnchor/CupertinoMenuItem就是基于 widgets 层的RawMenuAnchor实现 Flutter 正在把“菜单锚点、打开/关闭、overlay、焦点和手势”这类共性逻辑放在更低层让 Material 和 Cupertino 分别负责自己的视觉和交互风格。3.44 新增CupertinoMenuAnchor和CupertinoMenuItem它们提供 Cupertino 风格的菜单 popup支持 controller、open/close 回调、动画状态、overlay padding、长按打开、swipe 选择、focus/hover、destructive action 等能力CupertinoMenuAnchor( menuChildren: Widget[ CupertinoMenuItem( leading: const Icon(CupertinoIcons.doc_on_doc), subtitle: const Text(创建一个副本), trailing: const Icon(CupertinoIcons.right_chevron), onPressed: duplicateItem, child: const Text(复制), ), const CupertinoMenuDivider(), CupertinoMenuItem( leading: const Icon(CupertinoIcons.delete), isDestructiveAction: true, onPressed: deleteItem, child: const Text(删除), ), ], builder: (BuildContext context, MenuController controller, Widget? child) { return CupertinoButton( padding: EdgeInsets.zero, onPressed: () { controller.isOpen ? controller.close() : controller.open(); }, child: const Icon(CupertinoIcons.ellipsis_circle), ); }, )如果你不需要自己控制打开/关闭也可以传child并配合外部MenuControllerfinal MenuController controller MenuController(); CupertinoMenuAnchor( controller: controller, menuChildren: Widget[ CupertinoMenuItem( onPressed: () controller.close(), child: const Text(完成), ), ], child: CupertinoButton( onPressed: controller.open, child: const Text(更多), ), )这里和PlatformMenuBar不一样CupertinoMenuAnchor是 Flutter 自己绘制的 Cupertino-style popup menu适合控件附近的上下文菜单PlatformMenuBar则是交给宿主平台渲染的顶层菜单栏。Material 的MenuAnchor也新增了 Material 3 动画SubmenuButton上的新hoverOpenDelay参数可以控制子菜单的交互默认动画处于禁用状态可以通过 animated 设置为 true 来启用 另外CupertinoSheetRoute里面的可滚动内容现在可以和拖拽动画无缝协作对于需要自定义拖拽区域的开发者来说新的scrollableBuilder支持将托管的ScrollController传递给 body 的可滚动区域CarouselView 支持 infiniteCarouselView 这也也进行了大调整最重要就是支持了 infiniteMaterialCarouselView新增infinite参数开启后 Carousel 可以在两个方向连续循环滚动。这个能力覆盖普通CarouselView、CarouselView.weighted和 lazy builder 场景当infinite为 true 时carousel 支持无限循环双向连续滚动CarouselView( itemExtent: 280, infinite: true, children: ListWidget.generate(6, (int index) { return Card.filled( child: Center(child: Text(推荐内容 $index)), ); }), )SelectableRegion不得不说这个玩意一直都没完全支持好这次 3.44 主要解决了两个问题Web 布局约束保留 之前SelectableRegion在网页上渲染时可能会导致对应子元素意外缩小现在它会将所有布局约束原封不动地传递给子元素从而确保一致的尺寸行为多行复制精度现在SelectableRegion中的文本选择更加精确当用户选择并复制跨越多行的文本时复制的输出中会正确保留换行符不会丢失换行符Superellipse另外Superellipse 现在覆盖更多 iOS 风格形状CupertinoFocusHalo.withRoundedSuperellipse用RoundedSuperellipseBorder绘制更接近 iOS 的平滑圆角 focus haloShapedInputBorder可一配合RoundedSuperellipseBorder做 iOS-style shapeCupertino 的 dialog、context menu、sheet、list section、picker、segmented control 等路径已经基本采用ClipRSuperellipse/RoundedSuperellipseBorder。ClipRSuperellipse( borderRadius: BorderRadius.circular(28), child: Image.asset( assets/cover.jpg, width: 160, height: 160, fit: BoxFit.cover, ), )ExpansionTile最后ExpansionTileController页做了优化作为 Material 组件ExpansionTile底层基础的Expansible组件ExpansibleController和ExpansibleController都新增了切换方法Material 的列表图块RadioListTile、CheckboxListTile和SwitchListTile也支持了WidgetStatesController。import package:flutter/material.dart; class ExpansibleControllerDemo extends StatefulWidget { const ExpansibleControllerDemo({super.key}); override StateExpansibleControllerDemo createState() _ExpansibleControllerDemoState(); } class _ExpansibleControllerDemoState extends StateExpansibleControllerDemo { final ExpansibleController _controller ExpansibleController(); override void dispose() { _controller.dispose(); super.dispose(); } override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text(ExpansibleController.toggle), ), body: Padding( padding: const EdgeInsets.all(16), child: Expansible( controller: _controller, headerBuilder: (context, animation) { return Card( child: ListTile( title: const Text(自定义 Expansible Header), subtitle: const Text(底层展开组件不限制 Material 样式), trailing: RotationTransition( turns: Tweendouble( begin: 0, end: 0.5, ).animate(animation), child: const Icon(Icons.expand_more), ), onTap: () { _controller.toggle(); }, ), ); }, bodyBuilder: (context, animation) { return SizeTransition( sizeFactor: animation, child: const Card( child: Padding( padding: EdgeInsets.all(16), child: Text( 这里是展开内容。 Expansible 更适合做完全自定义 UI 而 ExpansionTile 是 Material 风格的封装。, ), ), ), ); }, ), ), floatingActionButton: FloatingActionButton.extended( onPressed: () { _controller.toggle(); }, label: const Text(toggle), icon: const Icon(Icons.swap_vert), ), ); } }无障碍ProgressIndicatorProgressIndicator的semanticsValue现在支持类似50%的百分比字符串之前 progress bar 语义检查更偏向数值区间现在对百分比文本有了明确支持const LinearProgressIndicator( value: 0.5, semanticsLabel: 文件上传进度, semanticsValue: 50%, )同样适用于CircularProgressIndicatorconst CircularProgressIndicator( value: 0.75, semanticsLabel: 同步进度, semanticsValue: 75%, )SliderSlider修复了语义节点尺寸问题_RenderSlider.assembleSemanticsNode会把语义 rect 设置为以 thumb center 为中心、大小为kMinInteractiveDimension的区域Slider( value: volume, min: 0, max: 100, divisions: 20, label: ${volume.round()}, onChanged: (double value) { setState(() volume value); }, semanticFormatterCallback: (double value) { return 音量 ${value.round()}%; }, )其他还有PopupMenuButton和DropdownButton的 expanded state 语义更新修复避免展开状态没有正确同步PinnedHeaderSliver修复语义焦点捕获问题不可见 semantics 节点从语义树中移除时的崩溃被修复自动播放视频预览通知用户是否已禁用视频预览的自动播放优先使用不闪烁光标允许 App 为那些觉得闪烁光标分散注意力或难以跟踪的用户提供稳定的、不闪烁的文本指示器自动播放动画图像 检测用户何时选择暂停自动播放 GIF 或其他动画内容最后可以看出来这个版本更新了很多最核心就是样式库已经完成初步解耦落地后续样式跟进和液态玻璃效果就能快很多了同时这也是一个充满 AI Coidng 场景的更新当然最可惜的还是桌面的依然不合并到 Stable 虽然我已经用了一段时间了。貌似关注过我的基本已经提前看到大半的 3.44 更新了吧那么更新吧骚年是时候勇敢的吃螃蟹了。
Flutter 3.44 发布啦,超级大版本更新!!!
发布时间:2026/5/22 2:57:35
虽然 Flutter 3.44 的版本已经发布两天了但是今天才是真正的官宣 Flutter 3.44 发布哦3.44 虽然看起来版本号不大但是这确实是一个超级大版本更新。也不知道为什么 Flutter 对于 3.x 这个版本号这么热爱就和 RN 热爱 0.x 一样。这次 3.44 核心包括Android HC 功能落地、iOS/MacOS 默认使用 Swift PM、多窗口功能落地、Material 和 Cupertino 解耦、各种 AI 场景支持、Widget Previewer 更新和各种功能优化。首先还是按照惯例Flutter 先公布了近期的一些数据情况其中pub.dev 在过去 30 天内 Package 下载量超过 13 亿次 Flutter 两大应用商店下月活开发者超过 150 万 一年内增长了 50%。这算是惯例对于 「Flutter 凉了没」的回覆。工具更新Widget Previewer虽然我基本没怎么用过但是 Flutter 官方一直很热衷 Widget Previewer 的优化这次主要有两个内容预览检测的逻辑重写了使用 analysis server 做 widget preview detection降低了 Flutter 工具的内存占用对于 IDE 用户而言整体内存占用最多可降低 50%自定义 preview annotation 支持 collections 和 records现在可以按组、名称、脚本和包 URI 筛选预览3.44 的 Previewer 其实就是接入了更底层的 analysis server 检测链路主要涉及IDE 能准确知道哪些函数、构造器、静态方法可以 previewPreviewer 要能处理真实项目里的 wrapper、theme、localization、状态注入依赖真实 analyzer 级别的语义信息可以看出来官方对于 Widget Previewer 很重视大概在 AI 时代Widget Previewer 可以在开发过程中有不错的事实预览效果。不需要 Rosetta这个我们提前聊过在之前的 《Flutter iOS 又修复了一个构建问题》 就提到过以前 Flutter 本身的构建工具还是需要 Rosetta 进行适配支持这次所有的 macOS 命令行工具都已经通过Fat Binary从而同时支持x86_64和arm64两种架构。因为下个版本 Rosetta 就要开始推出历史舞台了所以这也算事一个重要的跟进升级当然这个能力的 PR 的过程很抽象没看过的可以了解下是真的草台。。。。AIFlutter 官方真的很热衷跟进各种 AI 能力而且跟进的贼快。Agentic Hot Reload3.44 官方推出了全新的 Agentic Hot Reload 功能Flutter 在 AI 支持能力上一直很热衷这次的 Agentic Hot Reload 也是。从 3.44 开始一些 MCP 服务器和 Coding Agnet 支持自动查找并连接到正在运行的 Flutter App也就是类似 Antigravity 这样的 Coding Agnet 可以支持使用 Hot Reload 同时还有配置前面的 Previewer 整体 AI 开发体验会更好。另外Agent 现在可以通过服务直接读取本地 pub 包依赖不需要去取搜索本地 pub 缓存同时 MCP 相关的 Tools 也得到了更新。实际上这个能力以前也能做到AI 通过命令行的r输入也可以但是这次的是让 agent 有官方路径去发现运行中的 Flutter sessionagent 可以知道是哪个 App 正在运行因为是一整套的 MCP 协议支持。Skills关于 skills 在不久前我们也刚聊过《新 Flutter Dart Agent Skills 深度解读》 现在官方的 skills 都是“任务导向型”的 Skills每个 Skill 都不是在描述一个功能或者说明一个文档而是在提供一套决策逻辑让 AI 可以通过明确指令来解决问题并且提供对应的 反馈循环Feedback Loop。每个技 Skill 的结果都需要做检验类似flutter-fix-layout-issues、flutter-add-widget-test、flutter-add-integration-test、flutter-build-responsive-layout、flutter-setup-localization、flutter-implement-json-serialization、flutter-add-widget-preview、dart-fix-runtime-errors、dart-use-pattern-matching都是很实用的技能。Genkit Dart关于 GenKit 我们之前也一样在 《谷歌 Genkit Dart 正式发布》 聊过基于Genkit 可以构建全栈式 AI 驱动的智能体应用Flutter 使用 Dart 可以直接原生实现 AI 编排框架支持不同模型和本地场景提供 agent workflow / tool calling / RAG 等能力。通过 Genkit Dart 你可以实现一整套的 Agent 的服务端和客户端能力支持 Google、Anthropic 、 OpenAI 甚至本地模型的能力包括类型安全的结构化输出、工具调用、多轮对话和内置的可观测性能力等等。import package:genkit/genkit.dart; import package:genkit_google_genai/genkit_google_genai.dart; void main() async { final ai Genkit(plugins: [googleAI()]); final response await ai.generate( model: googleAI.gemini(gemini-flash-latest), prompt: Why is Dart a great language for AI applications?, ); print(response.text); }Gemma 4Flutter 也支持直接跑 Gemma 4 本地模型通过flutter_gemma插件App 可以和 Gemma 深度集成插件底层支持 LiteRT-LM 支持 GPU 和 NPU 加速最重要是支持全平台 GenUI这个大家应该也不陌生吧我们在 《Flutter GenUI 0.9 和 A2UI 0.9 发布》 才刚刚聊过官方表示Flutter A2UI GenUI作为基于 AI 的生成式 UI 支持Flutter 算是在 A2UI 领域最早的支持项目之一它提供了一套完整的协议实现可以让 Agent 在 App 运行中动态生成控件客户端不需要开发一个完整的页面功能开发者只需要维护组建库剩下的都交给 AI 。官方统计自从推出 Flutter GenUI SDK 以来软件包下载量自年初以来增长了 500%。官方特别提到了Catagay Ulusoy开发的Finnish it 可在 Google Play 商店和 Apple Store 下载 例子这款应用不仅能为用户创建定制化的课程计划来学习芬兰语还能根据每节课的需要动态生成完美的界面另外还有官方提供的 Demo 也分享了 DeepMind 使用 Flutter 构建 Gemini App “可视化布局”的效果 Android首先就是 Googlebook 支持我都还没用上Flutter 就宣布了 Googlebook 已经适配完成核心是适配了 Gemini 处理器的全新 Googlebook 笔记本电脑不过具体支持的如何还需要看真的发布后才知道。另外还有 Android 17 的适配 Flutter 3.44 也正在完成 Android 17 的适配包括本地网络保护和安全动态代码加载等场景 。Hybrid Composition另外还有一个重点就是 Hybrid Composition 终于落地了这个我们再去年的 《Flutter 正在推进全新 PlatformView 实现 HCPP》 就提到过这是一套全新的 PlatformView 实现可以提供更好的 PlatformView 新能HCPP 不再依赖屏幕外缓冲区或强制 Flutter 引擎处理原生视图而是将图层合成直接委托给 Android 本地然后利用 Vulkan 图形库的底层访问能力通过硬件缓冲区交换链和SurfaceControl事务将 Flutter UI 与原生 Android 视图同步。简单来说就是HCPP 主要就是通过SurfaceControl来构造一个高层级的Surface从而实现最终绘制时混合覆盖的问题这和 《深入 Flutter 和 Compose 的 PlatformView 实现对比》 里 Compose 可以在 PlatformView 里直接使用SurfaceView的道理类似都是SurfaceFlinger合成时的层级操作。只是需要 Vulkan 和 API 34 的环境才支持使用。所以 HCPP 对 Android API 和硬件有一定要求 可以通过在run中添加--enable-hcpp或者在AndroidManifest.xml文件中添加相应的配置标志来启用meta-data android:nameio.flutter.embedding.android.EnableHcpp android:valuetrue /Android 显示屏圆角Android 设备圆角支持PredictiveBackPageTransitionsBuilder新增对MediaQuery.displayCornerRadiiOf(context)的使用。简单说Android 设备真实屏幕圆角可以参与页面返回转场的裁剪效果让转场更贴合物理设备边界。如果你的应用自己覆盖了 Android 页面转场可以显式使用这个 builder设备圆角会由MediaQuery.displayCornerRadiiOf(context)自动参与裁剪拿不到设备圆角时走 fallbackMaterialApp( theme: ThemeData( pageTransitionsTheme: const PageTransitionsTheme( builders: TargetPlatform, PageTransitionsBuilder{ TargetPlatform.android: PredictiveBackPageTransitionsBuilder( fallbackColor: Colors.black, ), }, ), ), home: const HomePage(), )AGP 9 和 built-in Kotlin在 AGP 9 版本之前Android 应用和插件需要手动将 Kotlin Gradle 插件 (KGP) 添加到构建文件系统才能识别并编译 Kotlin 代码。从 AGP 9.0 开始Android 构建系统已原生支持 Kotlin由于构建系统已经处理了 Kotlin手动添加单独的 KGP 会导致冲突并造成构建失败所以这个情况需要 Flutter 进行适配所以如果你是开发 Flutter App这里需要更新 Android 构建文件删除单独的 Kotlin Gradle 插件 (KGP)如果是插件的话就需要对 Gradle 进行修改兼容设置 AGP 9.0 的插件必须pubspec.yaml里将 Flutter 的最低版本限制设置为 3.44 。这个问题主要还是 AGP 和 Kotlin 的破坏性更新带来的以前 Flutter Android 项目里常见的是plugins { id com.android.application id kotlin-android }或者老写法apply plugin: com.android.application apply plugin: kotlin-android而到了 AGP 9.0Android Gradle Plugin 自己内置了 Kotlin 支持同时默认启用也就是说普通 Android app/library 模块里不再需要显式 applyorg.jetbrains.kotlin.android或kotlin-android插件。Google 官方说法是AGP 9.0 introduces built-in Kotlin support and enables it by default不再需要 applyorg.jetbrains.kotlin.android/kotlin-android来编译 Kotlin 源码。所以迁移后的 Flutter Android app 大致会从plugins { id com.android.application id kotlin-android id dev.flutter.flutter-gradle-plugin } android { kotlinOptions { jvmTarget JavaVersion.VERSION_17.toString() } }变成plugins { id com.android.application id dev.flutter.flutter-gradle-plugin } android { // ... } kotlin { compilerOptions { jvmTarget org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 } }也就是删掉kotlin-android删掉android { kotlinOptions {} }改用顶层kotlin { compilerOptions {} }。Flutter 3.44 也不是强行让所有项目马上完全迁到 AGP 9 built-in Kotlin所以也加了两个 flag 做缓冲android.newDslfalse android.builtInKotlinfalse而为了支持还没迁移的项目Flutter 默认使用 legacy Kotlin Gradle Plugin 和 old AGP DSL typesFlutter migrator 会自动把这两个 flag 加到gradle.properties。ABIFlutter 之前的做法是帮你按构建类型动态塞 ABI 过滤器现在改成「在defaultConfig里统一塞一次」这个变化也是遇到 AGP 9 的合并规则后。以前一般是flutter build apk --target-platform android-arm64或者flutter build apk --split-per-abi而现在为了 AGP9 Flutter 把 ABI filter 放到了defaultConfigandroid { defaultConfig { ndk { abiFilters ... } } }所以如果在特定构建类型或产品风格中使用自定义abiFilters现在需要在构建或运行应用时传递-Pdisable-abi-filteringtrue标志。iOSSwift PM 默认这个我们其实也已经在 《Flutter 3.44 发布前夕官方宣布 SwiftPM 将完全取代 CocoaPods》 聊过从 Flutter 3.44 开始Swift Package Manager 成为是 iOS/macOS 的默认包管理器 同时这个包含了大量SwiftPM 的修复例如CocoaPods 与 SwiftPM 冲突提示、SwiftPM 最低平台版本诊断、SwiftPM 下载太慢的慢提示、SwiftPM cache 集中化处理、SwiftPM Add-to-App 工具等。现在 Flutter CLI 会自动处理迁移。构建或运行应用时CLI 会将 Xcode 项目更新为使用 SwiftPM如果依赖暂时不支持 SwiftPMFlutter 会 fallback 到 CocoaPods同时发出警告。如果在 add-to-app 场景下新的flutter build swift-package也会支持对应命令如果 SwiftPM 是在无法兼容页可以通过在pubspec.yaml文件中设置--enable-swift-package-manager: false来回退禁用。UIScene由于 Apple 已经强制了 UIScene 要求所以这里是想提醒你如果还么迁移适配那就要抓紧了。predictive text这是 iOS 上一个新的实验性支持TextField、CupertinoTextField、EditableText和TextInputConfiguration增加了enableInlinePrediction相关配置。也就是 iOS 文本输入接入 inline prediction 提供了 opt-in 配置并把配置从高层TextField传到底层 text input channelMaterial 风格输入框可以这样显式打开TextField( controller: titleController, enableInlinePrediction: true, textInputAction: TextInputAction.done, decoration: const InputDecoration( labelText: 标题, ), )Cupertino 风格输入框也有同名参数CupertinoTextField( controller: titleController, enableInlinePrediction: true, placeholder: 标题, textInputAction: TextInputAction.done, )默认功能是关闭的它目前只对 iOS 17 及以上的 inline predictive text 有用。Web这个版本主要都是一个简单优化例如支持prefers-reduced-motion也就是现在浏览器/系统说要“少动画”Flutter Web 能够适配然后 Web 还把这个偏好同步到 Flutter engine 的 accessibility 配置里让 Flutter 侧的disableAnimations/reduceMotion生效。另外现在 Flutter Web 表单错误能更快被屏幕阅读器读到也算是无障碍的一个优化。支持 iOS 26 Safari autofill Flutter Web 在 iOS 26 Safari 上不会再频繁销毁/重建用于 autofill 的隐藏 DOM form而是尽量复用同一个 form这样 Safari/密码管理器才能识别“这是一组连续的登录/注册表单字段”从而正常自动填充。DesktopFlutter 这次不装了直接宣布Canonical 将成为 Flutter Desktop 的主要维护者和战略合作伙伴这是什么意思就是 Desktop 完全交给 Canonical 维护和主导了。结果这次还是失望了虽然新增加了功能但是多窗口功能还是只仅在 master 可以用依然没有合并到 stable 。这次多窗口新增加了 Tooltips 、Popups 和 Dialogs 的落地同时 Linux 现在也支持了 content-sized 视图可以根据窗口内容动态调整窗口大小。另外这次更新里 showRawDialog / showDialog 可以走原生 dialog window 如果通过flutter config --enable-windowing启用了 windowing那么 dialog 会通过 windowing system 显示在自己的窗口中而不是当前窗口内的 modal overlay平台不支持时会 fallback 到普通 dialog route。其他还有_window.dart有了多类 controller 和 widgetRegularWindowController/RegularWindowDialogWindowController/DialogWindowTooltipWindowController/TooltipWindowPopupWindowController/PopupWindowSatelliteWindowController/SatelliteWindow嵌入式这里官方主要介绍了一些案件例如丰田的车机 RAV4 在 2025 年是全球最畅销的车型 而2026 款 RAV4 正在使用 Flutter 构建车机系统LG 的基于 Flutter 的 WebOS SDK 页要更新发布了webOS SDK 将包含对 Firebase、视频播放器、游戏手柄等插件的支持。Impeller3.44 版本包含多个 Vulkan 优化包括「更好的缓存内存管理」还有在丢帧情况下更高效的 GPU/CPU 同步使用 SDF 可以实现更清晰的圆圈这个圈我看了是真头晕。同时也改进了 Impeller 处理透视矩阵的方式修正了阴影和透视投影变换的渲染行为支持Get Uniform by Name API可以在着色器中按名称绑定 uniform 变量void setUp(ui.FragmentShader shader) { shader.getUniformFloat(foobar).set(1.234); }Framework解耦3.44 开始Material 和 Cupertino 就是独立的material_ui和cupertino_ui了而下个版本发布的时候框架内当前兼容的样式框就会被完全弃用兼容整整 60 多万行代码的 PR 弹框这次新增的CupertinoMenuAnchor/CupertinoMenuItem就是基于 widgets 层的RawMenuAnchor实现 Flutter 正在把“菜单锚点、打开/关闭、overlay、焦点和手势”这类共性逻辑放在更低层让 Material 和 Cupertino 分别负责自己的视觉和交互风格。3.44 新增CupertinoMenuAnchor和CupertinoMenuItem它们提供 Cupertino 风格的菜单 popup支持 controller、open/close 回调、动画状态、overlay padding、长按打开、swipe 选择、focus/hover、destructive action 等能力CupertinoMenuAnchor( menuChildren: Widget[ CupertinoMenuItem( leading: const Icon(CupertinoIcons.doc_on_doc), subtitle: const Text(创建一个副本), trailing: const Icon(CupertinoIcons.right_chevron), onPressed: duplicateItem, child: const Text(复制), ), const CupertinoMenuDivider(), CupertinoMenuItem( leading: const Icon(CupertinoIcons.delete), isDestructiveAction: true, onPressed: deleteItem, child: const Text(删除), ), ], builder: (BuildContext context, MenuController controller, Widget? child) { return CupertinoButton( padding: EdgeInsets.zero, onPressed: () { controller.isOpen ? controller.close() : controller.open(); }, child: const Icon(CupertinoIcons.ellipsis_circle), ); }, )如果你不需要自己控制打开/关闭也可以传child并配合外部MenuControllerfinal MenuController controller MenuController(); CupertinoMenuAnchor( controller: controller, menuChildren: Widget[ CupertinoMenuItem( onPressed: () controller.close(), child: const Text(完成), ), ], child: CupertinoButton( onPressed: controller.open, child: const Text(更多), ), )这里和PlatformMenuBar不一样CupertinoMenuAnchor是 Flutter 自己绘制的 Cupertino-style popup menu适合控件附近的上下文菜单PlatformMenuBar则是交给宿主平台渲染的顶层菜单栏。Material 的MenuAnchor也新增了 Material 3 动画SubmenuButton上的新hoverOpenDelay参数可以控制子菜单的交互默认动画处于禁用状态可以通过 animated 设置为 true 来启用 另外CupertinoSheetRoute里面的可滚动内容现在可以和拖拽动画无缝协作对于需要自定义拖拽区域的开发者来说新的scrollableBuilder支持将托管的ScrollController传递给 body 的可滚动区域CarouselView 支持 infiniteCarouselView 这也也进行了大调整最重要就是支持了 infiniteMaterialCarouselView新增infinite参数开启后 Carousel 可以在两个方向连续循环滚动。这个能力覆盖普通CarouselView、CarouselView.weighted和 lazy builder 场景当infinite为 true 时carousel 支持无限循环双向连续滚动CarouselView( itemExtent: 280, infinite: true, children: ListWidget.generate(6, (int index) { return Card.filled( child: Center(child: Text(推荐内容 $index)), ); }), )SelectableRegion不得不说这个玩意一直都没完全支持好这次 3.44 主要解决了两个问题Web 布局约束保留 之前SelectableRegion在网页上渲染时可能会导致对应子元素意外缩小现在它会将所有布局约束原封不动地传递给子元素从而确保一致的尺寸行为多行复制精度现在SelectableRegion中的文本选择更加精确当用户选择并复制跨越多行的文本时复制的输出中会正确保留换行符不会丢失换行符Superellipse另外Superellipse 现在覆盖更多 iOS 风格形状CupertinoFocusHalo.withRoundedSuperellipse用RoundedSuperellipseBorder绘制更接近 iOS 的平滑圆角 focus haloShapedInputBorder可一配合RoundedSuperellipseBorder做 iOS-style shapeCupertino 的 dialog、context menu、sheet、list section、picker、segmented control 等路径已经基本采用ClipRSuperellipse/RoundedSuperellipseBorder。ClipRSuperellipse( borderRadius: BorderRadius.circular(28), child: Image.asset( assets/cover.jpg, width: 160, height: 160, fit: BoxFit.cover, ), )ExpansionTile最后ExpansionTileController页做了优化作为 Material 组件ExpansionTile底层基础的Expansible组件ExpansibleController和ExpansibleController都新增了切换方法Material 的列表图块RadioListTile、CheckboxListTile和SwitchListTile也支持了WidgetStatesController。import package:flutter/material.dart; class ExpansibleControllerDemo extends StatefulWidget { const ExpansibleControllerDemo({super.key}); override StateExpansibleControllerDemo createState() _ExpansibleControllerDemoState(); } class _ExpansibleControllerDemoState extends StateExpansibleControllerDemo { final ExpansibleController _controller ExpansibleController(); override void dispose() { _controller.dispose(); super.dispose(); } override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text(ExpansibleController.toggle), ), body: Padding( padding: const EdgeInsets.all(16), child: Expansible( controller: _controller, headerBuilder: (context, animation) { return Card( child: ListTile( title: const Text(自定义 Expansible Header), subtitle: const Text(底层展开组件不限制 Material 样式), trailing: RotationTransition( turns: Tweendouble( begin: 0, end: 0.5, ).animate(animation), child: const Icon(Icons.expand_more), ), onTap: () { _controller.toggle(); }, ), ); }, bodyBuilder: (context, animation) { return SizeTransition( sizeFactor: animation, child: const Card( child: Padding( padding: EdgeInsets.all(16), child: Text( 这里是展开内容。 Expansible 更适合做完全自定义 UI 而 ExpansionTile 是 Material 风格的封装。, ), ), ), ); }, ), ), floatingActionButton: FloatingActionButton.extended( onPressed: () { _controller.toggle(); }, label: const Text(toggle), icon: const Icon(Icons.swap_vert), ), ); } }无障碍ProgressIndicatorProgressIndicator的semanticsValue现在支持类似50%的百分比字符串之前 progress bar 语义检查更偏向数值区间现在对百分比文本有了明确支持const LinearProgressIndicator( value: 0.5, semanticsLabel: 文件上传进度, semanticsValue: 50%, )同样适用于CircularProgressIndicatorconst CircularProgressIndicator( value: 0.75, semanticsLabel: 同步进度, semanticsValue: 75%, )SliderSlider修复了语义节点尺寸问题_RenderSlider.assembleSemanticsNode会把语义 rect 设置为以 thumb center 为中心、大小为kMinInteractiveDimension的区域Slider( value: volume, min: 0, max: 100, divisions: 20, label: ${volume.round()}, onChanged: (double value) { setState(() volume value); }, semanticFormatterCallback: (double value) { return 音量 ${value.round()}%; }, )其他还有PopupMenuButton和DropdownButton的 expanded state 语义更新修复避免展开状态没有正确同步PinnedHeaderSliver修复语义焦点捕获问题不可见 semantics 节点从语义树中移除时的崩溃被修复自动播放视频预览通知用户是否已禁用视频预览的自动播放优先使用不闪烁光标允许 App 为那些觉得闪烁光标分散注意力或难以跟踪的用户提供稳定的、不闪烁的文本指示器自动播放动画图像 检测用户何时选择暂停自动播放 GIF 或其他动画内容最后可以看出来这个版本更新了很多最核心就是样式库已经完成初步解耦落地后续样式跟进和液态玻璃效果就能快很多了同时这也是一个充满 AI Coidng 场景的更新当然最可惜的还是桌面的依然不合并到 Stable 虽然我已经用了一段时间了。貌似关注过我的基本已经提前看到大半的 3.44 更新了吧那么更新吧骚年是时候勇敢的吃螃蟹了。