首页 > 技术文章 > Flutter 1.22 正式发布

mengqd 2020-10-09 21:53 原文

支持iOS 14和Android 11,新的i18n和l10n支持,可用于生产的Google Maps和WebView插件,新的App Size工具等等!

作者:Chris Sells

原文:https://medium.com/flutter/announcing-flutter-1-22-44f146009e5f

我们很高兴推出最新版本的Flutter,它广泛支持iOS 14和Android11。Flutter 1.22在以前版本的基础上构建,使开发人员能够从一个代码库为多个平台构建快速,美观的用户体验。我们的季度稳定版本包含最新功能,性能改进和错误修复,适合广泛的生产使用。

由于这是新的移动操作系统版本的发布季节,因此此发行版侧重于确保Android 11和iOS 14与Flutter兼容。这两个操作系统的更新都包括大量的幕后工作,以符合最新的SDK并确保所有内容都通过我们广泛的测试套件。对于iOS 14,此版本包括对新Xcode 12,新图标的支持以及对新iOS 14 App Clips功能的预览支持。对于Android 11,此更新支持新类型的显示切口以及在调出软键盘时更流畅的动画。

该版本发布于我们的1.20发布两个月之后,因此比大多数版本都短。即使在这么短的时间内,我们也关闭了3,024期,合并了197个贡献者的1,944个PR。在这些贡献者中,有114位(58%)来自整个社区,他们贡献了271个PR。最大的单一贡献者是 a14n,他再次以20个PR成为我们的杰出贡献者名单,其中大多数是作为支持Flutter中的零安全性工作的一部分而完成的(更多内容即将推出)。

除了对新的移动操作系统版本的支持外,还有很多其他要分享的新闻,包括预览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设备上会禁止运行debug应用程序,但实际开发debug除外
  • 针对本地调试的Flutter应用程序的有关网络安全的新策略使iOS 14显示一次性确认对话框(仅在开发过程中,不适用于已发布的Flutter应用程序)

如果您要通过Flutter应用定位iOS 14,我们强烈建议您使用Flutter 1.22对其进行重建,然后立即将其部署到App Store中,以确保您的iOS 14用户获得最佳体验。

有关使用Flutter适配iOS 14的更多详细信息,包括添加Flutter应用到原生应用,deep linking和通知注意事项,请参阅 flutter.dev上的iOS 14文档

希望所有有关工具和SDK支持的工作都可以让您专注于自己关心的编码-利用iOS 14的新功能。

其中一项功能是对iOS的新SF Symbols字体的更新支持,我们花一些时间更新了cupertino_icon程序包。将cupertino_icons依赖关系更新为新的1.0主要版本后,CupertinoIcons的现有用法将自动映射到新样式。如果您将cupertino_icons 1.0与Flutter 1.22结合使用,那么您还可以通过CupertinoIcons API访问约900个新图标。

您可以在cupertino_icons预览页面上看到图标的完整列表,在 flutter.dev上可以看到迁移详细信息页面

您可以在iOS 14上尝试使用Flutter的另一个功能是App Clips,它是iOS 14的一项新功能,它支持10MB以下轻量级应用程序的快速,无安装应用程序执行。在Flutter 1.22版中,我们预览了使用Flutter构建的App Clip目标。

有关如何使用Flutter构建Clip的更多详细信息,请查看flutter.dev上的文档。您也可以参考这个简单的示例项目

Android 11

Flutter的这个版本也与本月Android 11的发布相吻合。 Flutter框架和引擎已更新,以支持最新版本的Android中引入的两个新功能。

首先,Flutter现在支持多种屏幕适配(比如瀑布屏)。

通过使用MediaQuery和SafeArea API,您可以确保将活动的UI和交互式元素放置在设备显示屏的无障碍区域中。另外,您将要避免在瀑布边缘区域使用手势检测器,因为这可能会导致意外触摸。

其次,动画在显示软件键盘时与Android 11同步。

问题 #19279是一个长期存在的问题,其中系统键盘的显示/隐藏动画与Flutter的插图不同步。这在Android 11中已修复。

关于Android嵌入API的一项说明。去年,随着Flutter 1.12版的推出,我们推出了一套适用于Android的新Flutter引擎和Flutter插件API。我们创建了这些v2 API,以更好地支持Android上的应用程序添加用户。一年后,超过80%的Android插件使用了新的Android API。从1.22开始,我们不再使用较旧的v1 API。

如果您仍在使用Android v1 API,那么这对您意味着:

  • 新创建的插件将不再针对v1 API
  • Flutter工具的 -no-enable-android-embedding-v2配置标记已删除,现在是默认行为
  • 仍在使用v1 API的旧版应用程序在构建过程中将显示弃用警告,该警告指向支持新的Android插件API文档

同时,如果您仍然有基于v1 Android API的Flutter应用程序,它将继续运行。但是,您可能会开始遇到仅针对v2 API且v1 Android API无法使用的新插件。有关更多详细信息,请参见重大更改文档

扩展的 Button 组件

现有的Flutter按钮看上去不错,但很难使用,尤其是在需要自定义主题时。此外,“Material”规范已扩展为包括具有新样式的新按钮。

为使Flutter保持与Material指南的最新水平,我们很高兴地宣布Flutter 1.22中的引入全新的按钮。

该PR并没有尝试就地开发现有的按钮类及其主题,而是引入了新的替换按钮小部件和主题。除了使我们摆脱现有类的向后兼容性迷宫之外,新名称还使Flutter与Material Design规范同步,后者使用按钮组件的新名称。

新主题遵循Flutter最近在新Material窗口小部件中采用的“规范化”模式。如果您想玩演示,DartPad上有一个很棒的演示。这并不是一个重大变化,因为FlatButton,OutlineButton,RaisedButton,ButtonBar,ButtonBarTheme和ButtonTheme的语义不会改变。您可以将旧按钮与新按钮混合使用。

新的国际化和本地化支持

自Flutter创立以来,Flutter已提供您的应用程序国际化(i18n)和本地化(l10n)所需的核心功能。但是,在此版本中,我们将最佳做法的意见纳入了我们的工具中,甚至在添加新的l10n信息时启用了热重装支持来更新您的应用。

如果您想了解有关Flutter对l10n的支持的更多详细信息,包括本地化消息,带有参数的消息,日期,数字和货币,请阅读Flutter Internationalization用户指南

此外,如果您对i18n和l10n感兴趣,那么您可能还对那些字符串不适合普通ASCII字符的字符串感兴趣,例如Unicode和emoji。最近,Dart团队发布了character软件包,该软件包可帮助开发人员处理Unicode(扩展)字形簇。该软件包有助于解决诸如如何正确地将字符串(如“ A in text in English”)缩写为前15个字符的问题。使用String类,该缩写为“ A

推荐阅读