作者 / Chris Sells, Product Manager, Flutter developer experience
我们很高兴推出支持 iOS 14 和 Android 11 的最新版 Flutter。Flutter 1.22 基于之前的版本更上一层楼,继续助力开发者基于一个代码库为多个平台打造快速、美观的用户体验。我们的季度稳定版本中囊括了最新功能、性能改进和问题修复,且适用于多样的生产环境。
由于本季度是新版移动操作系统的发布季,因此这一版本侧重于确保 Flutter 能够有效支持 Android 11 和 iOS 14。针对这两种操作系统的更新涉及大量的底层工作,以符合最新版 SDK 的规范,并确保所有功能都能通过我们广泛的测试套件中的测试。针对 iOS 14,此版本包含了对新版 Xcode 12 和新图标的支持,以及对 iOS 14 的新功能轻 App (App Clips) 的预览支持。针对 Android 11,此更新支持新的屏幕类型 (如挖孔屏和瀑布屏),以及在调出软键盘时可以提供更流畅的动画效果。
此版本的发布距我们 1.20 版本的发布仅有两个月时间,因此发布间隔比大多数版本都短。但在如此有限的时间内,我们解决了 3,024 个议题 (issue),并且合并了来自 197 位贡献者的 1,944 个 PR。其中有 114 位 (58%) 来自社区,并贡献了 271 个 PR。a14n 是最突出的个人贡献者,他再次以 20 个 PR 登上我们的杰出贡献者名单榜首,他贡献的大多数 PR 旨在支持 Flutter 中的空安全 (敬请期待更多即将发布的更新)。
a14n
https://github.com/a14n
除了对新版移动操作系统的支持以外,我们还有很多其他消息要与您分享,包括针对 Android 呼声最高的功能之一 "状态恢复" 的预览、一整套新的 Material 按钮、可与热重载配合使用的全新国际化与本地化支持、新版 Navigator、稳定版 Platform Views (Google Maps 和 WebView 插件的基础),以及可以在代码中设置的开关,用以改善高刷新率显示屏设备上的滚动效果。我们还提供了一款新工具,可用于剖析应用大小并确保您所构建的插件仅支持您要支持的平台。
支持 iOS 14
每当厂商发布新版移动操作系统时,我们都会对其进行彻底测试,以查找会影响 Flutter 及其工具的兼容性问题或变更。
为了适配 iOS 14,我们对 Flutter 进行了多项更改,以确保其功能可以满足开发者的需求:
Xcode 12 需要 iOS 9.0 或更高版本,因此我们的默认模板的默认系统版本从 8.0 提高到 9.0
iOS 14 带来的崩溃和字体渲染问题已在 Flutter 1.22 中得到修复
自 Flutter 1.20.4 起,部署到物理设备的问题已得到解决
应用访问剪贴板时会显示相关使用通知,这项新策略在 Flutter 应用中曾引发虚假通知,该问题已在 Flutter 1.20.4 中得到修复
禁止在 iOS 14 设备上运行调试应用,但在调试过程中运行应用除外
针对本地调试的 Flutter 应用,有关网络安全的新策略会使 iOS 14 显示一次性确认对话框 (仅针对开发中的应用,不适用于已发布的 Flutter 应用)
综上所述,要使您的 Flutter 应用适配 iOS 14,我们强烈建议您立即使用 Flutter 1.22 重新构建应用,然后将其发布至 App Store,以确保您的 iOS 14 用户获得最佳体验。
有关 Flutter 适配 iOS 14 的更多详细信息,包括一些 Add-to-App (将 Flutter 集成至现有应用)、深链接和通知考量因素,请参阅 Flutter 的 iOS 14 文档。
Flutter 的 iOS 14 支持
https://flutter.cn/docs/development/ios-14
希望我们在工具和 SDK 支持方面所做的工作能够帮助您专注于最关键的任务: 充分利用 iOS 14 的新特性。
其中一项特性就是更新了对 iOS 新版 SF Symbols 字体的支持,为此,我们也相应地更新了 cupertino_icon package。将 cupertino_icons 依赖项更新到新的 1.0 主版本后,现有的 CupertinoIcons 调用将自动映射为新样式。如果将 cupertino_icons 1.0 与 Flutter 1.22 结合使用,那么通过 CupertinoIcons API,您将能够获得约 900 个新图标。
cupertino_icon package
https://pub.flutter-io.cn/packages/cupertino_icons
CupertinoIcons
https://api.flutter.cn/flutter/cupertino/CupertinoIcons-class.html
您可以在 cupertino_icons 预览页面中查看完整的图标列表,也可以参阅 flutter.dev 上的迁移详情页。
图标列表
https://flutter.github.io/cupertino_icons/
迁移详情
https://flutter.cn/docs/release/breaking-changes/cupertino-icons-1.0.0
针对 iOS 14,您可以使用 Flutter 尝试的另一项功能是 App Clips,它是 iOS 14 的一项新增功能,支持以快速、免安装的方式执行 10MB 以下的轻量版本应用。在 Flutter 1.22 版中,我们提供了使用 Flutter 构建轻 App 的功能预览。
App Clips
https://developer.apple.com/app-clips/
△ 使用 Flutter 构建的轻 App 体验
有关如何使用 Flutter 构建轻 App 的更多详细信息,请参阅技术文档。您也可以参考这一简单的示例项目。
技术文档: 添加 iOS App Clip 支持
https://flutter.cn/docs/development/platform-integration/ios-app-clip
示例项目
https://github.com/flutter/samples/tree/master/ios_app_clip
Android 11
此版本 Flutter 的发布与 Android 11 的发布时间也刚好契合。我们更新了 Flutter 框架和引擎,以支持最新版 Android 系统中引入的两项新特性。
第一,Flutter 现在可以提供安全边衬区,以支持 Android 设备的异形屏幕,包括刘海屏、挖孔屏和瀑布屏。
通过使用 MediaQuery 和 SafeArea API,您可以确保将活动的界面和交互元素放置在设备显示屏的无遮挡区域内。另外,您需要避免在瀑布屏边缘区域内设置手势检测,从而避免误触问题。
MediaQuery
https://api.flutter.cn/flutter/widgets/MediaQuery-class.html
SafeArea
https://api.flutter.cn/flutter/widgets/SafeArea-class.html
第二,Flutter 应用内显示软件键盘时的动画已经可以与 Android 11 实现同步。
△ 请注意左侧悬浮操作按钮 (FAB) 的同步位移
Issue #19279 由来己久,即系统键盘的显示/隐藏动画与 Flutter 的边衬区一直无法同步。这一问题在 Android 11 中已得到解决。
#19279
https://github.com/flutter/flutter/issues/19279
这里做一则关于 Android 嵌入 API 的说明。去年,随着 Flutter 1.12 版的发布,我们推出了一套适用于 Android 系统的新版 Flutter 引擎和 Flutter 插件 API。我们打造了这些 API 的 v2 版本,以更好地支持 Android 平台的 Add-to-App 用户。一年后,我们有超过 80% 的 Android 插件使用了新版 Android API。自 1.22 起,我们将弃用较旧的 v1 版本 API。
如果您仍在使用 Android v1 API,那么将存在如下问题:
新创建的插件将不再适配 v1 API
Flutter 工具的 —no-enable-android-embedding-v2 配置标记已移除,现已作为默认行为
仍在使用 v1 API 的旧版应用在构建时会显示弃用警告,并提供支持新版 Android 插件 API 的文档入口