随着 Flutter 3.38 版本的发布,开发者们迎来了许多令人兴奋的新特性和改进。这些更新不仅提升了开发效率,还优化了开发者的整体体验。本文将重点介绍一些常用且必须了解的更新内容。

一、点语法简写

// 新版本写法
Column( 
  mainAxisAlignment: .start, 
  crossAxisAlignment: .center, 
  children: [ /* ... */ ], 
), 

// 不使用简写
Column( 
  mainAxisAlignment: MainAxisAlignment.start, 
  crossAxisAlignment: CrossAxisAlignment.center, 
  children: [ /* … */ ], 
),


Padding(
  padding: .all(8.0), // EdgeInsets.all 
  child: Text('Hello world'),
),

二、滚动:更稳健、更可预测的条形滚动

此版本带来了一系列修复,使得构建复杂的滚动布局(尤其是使用SliverMainAxisGroup和的布局SliverCrossAxisGroup)更加稳健和可预测。

使用这些组件将多个 Sliver 分组的开发者会发现,手势处理现在更加可靠。现在可以正确计算这些组内 Sliver 的点击和其他指针事件的命中测试,确保用户交互按预期运行。

此次更新还改进了复杂布局中键盘和方向键用户的焦点导航体验。在具有不同滚动轴的嵌套滚动视图(例如水平轮播图的垂直列表)中,方向性焦点导航现在更加可预测,防止焦点在不同部分之间意外跳转。

三、iOS方面的更新

Flutter 完全支持最新的平台版本:iOS 26、Xcode 26 和 macOS 26,这些版本均于 9 月发布。这确保可以立即在 Apple 最新的操作系统和工具上开始开发和测试应用。

Flutter 最新版本为 iOS 开发者带来了显著的体验提升,解决了用户长期以来的一个痛点:在物理设备上运行 Flutter 应用时,Xcode 应用必须自动启动flutter run。新版本引入了一种新的部署方式,使用 Xcode 26 命令行工具devicectl 来进行应用的安装、启动和调试。这种方式无需在部署过程中调用 Xcode 应用,大多数情况下完全依赖于命令行 Xcode 构建工具。

3.1 UIScene 生命周期迁移

Flutter 3.38 包含了对苹果强制要求的UIScene 生命周期的重要支持。这是继苹果在 WWDC25 上宣布“在 iOS 26 之后的版本中,任何使用最新 SDK 构建的 UIKit 应用都必须使用 UIScene 生命周期,否则将无法启动”之后的一项关键且积极的更新。

为确保 iOS Flutter 应用程序在未来的 iOS 版本上保持兼容性并成功启动,需要进行迁移。

3.2 迁移 Flutter 应用程序

iOS Flutter 应用都必须迁移到新的生命周期。可以通过两种方式完成此迁移:

  1. 手动迁移:请按照 Flutter网站上提供的手动迁移说明进行操作。
  2. 自动迁移(目前是实验性的):启用此实验性功能可自动处理迁移。此功能将在未来的版本中默认启用。运行以下命令:
flutter config --enable-uiscene-migration

3.3 迁移 Flutter 插件

依赖应用程序生命周期事件的 Flutter 插件必须更新为使用 UIScene 生命周期事件。

四、Android方面的更新

4.1 16KB页面大小兼容性

升级到 Flutter 3.38 是满足Google Play 16 KB 页面大小兼容性要求的必要准备。从2025 年 11 月 1 日起,面向 Android 15 及更高版本的应用必须支持 16 KB 页面。此项变更可确保您的应用在高内存设备上正常运行,并带来性能提升,例如启动速度提升高达 30%。Flutter 3.38 将默认的 Android ndkVersion 更新为 NDK r28,这是原生代码实现 16 KB 页面大小支持的最低要求。

4.2 内存修复

Flutter 3.38修复了一个影响所有 Android 平台 Flutter 应用的严重内存泄漏问题。该问题(在 3.29.0 版本中引入)发生在 Activity 在退出时被销毁的情况下,无论是开发者设置中配置的销毁方式,还是由于内存不足而被系统强制终止的 Activity。

4.3 Android 依赖项更新

为应用找到合适的 Android 依赖项版本组合通常是一项挑战,这些依赖项包括 Gradle、Android Gradle 插件 (AGP)、Kotlin Gradle 插件 (KGP)、Java 等。对于 Flutter 3.38 版本,在持续集成 (CI) 环境中测试并确认了以下 Android 依赖项版本组合的兼容性:

  • Java 17:Flutter 3.38 中 Android 开发的最低版本要求。
  • KGP 2.2.20:该工具支持的最高Kotlin Gradle 插件版本
  • AGP 8.11.1:最新的 Android Gradle 插件版本,与 KGP 2.2.20
  • Gradle 8.14:此版本与所选的 Java、KGP 和 AGP 版本兼容。请注意,AGP 8.11.1 的最低版本要求为 Gradle 8.13。

为了确保应用能够在不同的 Flutter 版本之间无缝运行,强烈建议在构建文件中使用 Flutter SDK 提供的 API 级别变量。此版本配置的值如下:

  • flutter.compileSdkVersion(API 36)
  • flutter.targetSdkVersion(API 36)
  • flutter.minSdkVersion(API 24)或更高

五、开发者工具和集成开发环境

Flutter 3.35 引入了 Widget Previews(组件预览),这是一项实验性功能,旨在收集社区的早期反馈。Flutter 3.38 版本对 Widget Previews 进行了重大改进,包括:

  • IDE 集成: VSCode 和 IntelliJ/Android Studio 插件均已更新,初步支持 Widget 预览。现在可以直接在 IDE 中查看预览,从而获得更流畅的开发体验。在集成开发环境 (IDE) 中使用时,控件预览环境默认配置为根据当前选定的源文件筛选显示的预览

  • 预览可扩展性:预览注解类不再标记为 final,现在可以扩展以创建自定义预览注解,从而减少常见预览类型的样板代码。

  • 多预览支持:新增的MultiPreview基类允许从单个自定义注释创建多个预览变体。

  • 预览组:类中的新分组参数Preview允许对相关的预览进行分组。

  • 放宽了对 @Preview 注解参数的限制:现在支持将私有常量作为Preview注解的参数。函数参数(例如 wrapper 和 theme)仍然需要具有公开的、静态可访问的名称。

六、弃用和重大变更

1、SnackBar 将不再自动关闭

2、Flutter 3.38 要求 Android 的最低 Java 版本为 17

七、总结

Flutter 3.38 的发布为开发者带来了许多实用的新特性和改进,帮助我们更高效地构建高质量的移动应用。希望本文能帮助大家更好地理解和利用这些新特性,提升开发体验!

后续文章优先在 WX公众号 “天天开发” 中发布,如有需要请搜索关注!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐