flutter 1.17更新日志
包括对iOS上Metal支持,新的Material组件,新的Network跟踪工具等等!
由Flutter产品经理Chris Sells发布,今天我们很高兴地宣布Flutter 1.17,这是我们2020年的第一个稳定版本。
对所有人来说,今年是充满挑战的一年。我们的目标是按季度节奏发布稳定的发行版;但是,此发行版花费了很长的时间,因为我们一直在为新的发行流程调整基础架构。我们继续将质量作为第一要务,并相信新的发布模型将提高修补程序的稳定分支的能力。此版本已修复自1.12稳定版本以来的6,339个问题。这里很大一部分归功于我们与Nevercode的合作伙伴关系,这使得我们在响应客户问题时具有更高的响应速度。我们今年关闭的漏洞数量超过了已打开的数量,因此净减少了约800个问题。我们从231位贡献者那里合并了3,164个PR,从而修复了许多错误。这些都是庞大的数字,在此充满挑战的时刻,我们由衷的感谢大家的辛勤工作和不断的贡献。
如果您对我们在此发行版中合并的PR的完整列表感兴趣,可以在flutter.dev站点上看到。除了质量改进之外,我们还设法在此版本中包含了一些新功能,包括iOS上的Metal支持,新的Material组件,新的Network跟踪工具等等!此发行版还包含Dart 2.8,您可以在Dart博客上阅读有关此内容的更多信息。
移动性能和内存以及大小改进
此版本的主要重点是在性能和内存提升方面。只需将您的应用程序升级到此版本,您的用户就会看到更快的动画,更小的应用程序和更低的内存占用率。在此版本中,默认导航情况(不透明路由页面)的速度将提高20%-37%。对于简单的iOS动画,您还将看到最多减少40%的CPU / GPU使用率,具体取决于硬件(在PR 14104和PR 13976中进行了详细介绍)。
此版本还提供了一个相当明显的应用程序包体积的减小,主要是通过几个补丁实现的{1,2,3,4,5}。例如,Android的Flutter Gallery示例在2019年底为9.6MB,现在为8.1MB,减少了18.5%。
对于内存使用,此版本在快速滚动浏览大图像时减少了70%的内存使用,这也使得性能提高,具体取决于设备的内存量。
当然,最突出的性能改进是iOS中对Metal的支持。
Metal支持可将iOS的性能提高50%
苹果公司对iOS上的Metal的支持几乎可以直接访问底层GPU,并且是苹果公司推荐的图形API。在完全支持Metal的iOS设备上,Flutter现在默认情况下使用它,从而使您的Flutter应用程序大多数时候运行得更快,平均使渲染速度提高约50%(取决于您的工作量)。
对于不完全支持Metal的设备(A7处理器之前的版本或运行10之前的iOS版本的设备),Flutter会像过去一样使用OpenGL,从而为较旧的设备提供native 的渲染速度。有关更多详细信息,请在 Flutter Wiki上查看iOS上的Metal常见问题。
Material小部件:NavigationRail,DatePicker等
我们会根据内部和外部客户的反馈,继续改进Flutter中Material Design设计系统。在此版本中,我们添加了NavigationRail,它提供了响应式应用程序导航模型。它是由Google Material Design团队设计和实现的。它很容易在需要切换于移动和桌面之间的应用程序上为您提供跟随屏幕尺寸的动态变化的布局。
要查看NavigationRail实际效果,请查看web_dashboard示例或在DartPad上尝试。
除了新的小部件之外,此版本还包括Material DatePicker和“文本选择”溢出小部件的更新。
此DatePicker版本包括新的视觉效果以匹配更新的Material准则以及新的文本输入模式。您可以在Material Date Picker Redesign规范中阅读有关详细信息。
现在,按钮在界面长度不够展示的情况下,选择使用文本选择菜单,提高了Android和iOS的准确度。这在菜单项单词可能更长的语言环境中效果尤其明显。
在与Flutter 1.17开发同时,我们还交付了新的Animations软件包,该软件包提供了实现新的Material motion规范的预构建动画。
在动画系列的博客文章中,Material设计团队定义了四个过渡模式,用于描述组件和全屏视图之间的动画:容器变换,共享轴,淡入和淡出。尽管这些动画在Flutter中始终可用,但是Animations软件包使实现它们变得相当容易。将它们放到您的应用中,今天就让您的用户满意!
Material文本比例:使Flutter文本主题现代化
在此版本中,Flutter团队完成了2018 Material Design规范的Type Scale部分的实现,同时没有破坏现有的Flutter应用程序。2018年10月在PR 22330中添加了对新配置的选择支持(但未提供新名称)。现有的文本样式名称未更改,因为一旦修改是对API的重大更改,可能会影响大多数应用程序。此版本更新了TextTheme API以匹配当前的Material规范,保留了旧名称,以使您的代码可以继续运行。但是,旧名称已被弃用,因此您将收到警告,以鼓励您采用新名称。
下表总结了2018 Material TextStyle的名称和配置。
请注意,Material设计规范中TextStyles中所谓的body1和body2在flutter的TextTheme API中被称为bodyText1和bodyText2。同样,TextStyles所谓的H1-H6在flutter TextThemeAPI中被称为headline1-headline6。
Google字体用于Flutter
文字和字体齐头并进,因此,如果您对新的Material Text Scale实现感兴趣,那么您可能也会对新的Flutter v1.0版Google字体感兴趣。
Google字体允许开发人员在其应用中轻松地尝试和使用fonts.google.com中的任何字体。当应用程序准备发布时,开发人员将决定用户是否通过从API下载字体来接收字体,或者将其预先置于应用程序包里。
Accessibility(可访问性和辅助功能)和国际化
最后,Accessibility是我们持续关注的一个重要领域,因为我们认为让尽可能多的用户使用Flutter应用程序是一个优先事项。在此版本中,我们已完成了所有工作,包括对滚动,文本 字段和其他输入小部件的修复。您将在GitHub中看到有关Accessibility问题的完整列表。我们鼓励您测试自己的应用程序的Accessibility,并且还把一些推荐的最佳实践更新到了此版本中的文档中。
在国际化方面,我们一直在研究一些影响三星键盘输入法的问题,这些问题影响了各种东亚语言的文本输入。我们很高兴地说,我们已经完成了这项工作,尤其是韩国开发人员应该在此版本中找到很多值得庆祝的东西。
工具:Dart DevTools升级,Android快速入门等
此版本使我们非常接近将Dart DevTools的当前版本与新的Flutter版本交换。如果您想尝试一下,请启动DevTools并单击DevTools右上角的“烧杯”图标。
在使用Flutter实现的Dart DevTools的预发布版本时,您可能会注意到各种改进,但是最大的改进是新的“ 网络”选项卡。
如果未在Dart DevTools的预发行版中看到“网络”选项卡(例如,如果从命令行运行它),则可以使用以下命令手动更新它:
- $ pub globalactivate devtools
按下记录按钮后,网络tab下将显示Flutter应用程序的网络流量。此外,如果您希望从启动应用程序时立即开始捕获网络流量,则可以在main()方法中包含以下代码行:
void main(){ //启用网络流量日志记录 HttpClient.enableTimelineLogging = true; runApp(MyApp()); }
除了更新的Dart DevTools,此版本还增加了对实验性快速启动选项的支持,该选项使您运行Android时可以将Flutter应用程序的调试速度提高70%。您可以通过命令运行flutter run —-fast-start -d
。此选项将安装仅包含您的插件代码(不包括任何Dart代码或资产)的通用Android应用。这使得重复执行flutter run命令时的启动速度更快,因为Dart代码或asset的更改不需要重新构建APK。此选项将您的应用程序捆绑到实际上未在设备上安装的通用Android“包装器”中,这与我们的常规启动选项不同。此外,在某些情况下它不起作用,例如,当您使用访问后台执行的插件时。如果您的Android调试启动时间让您失望,请尝试一下。
如果您app跑在Android平台上,则要注意的另一个变化是,现在AndroidX是创建新Flutter项目时的唯一选择。AndroidX库提供了Android Jetpack的高级Android功能。在上一个版本中,我们弃用了原始的Android支持库,并将其移至AndroidX作为所有新项目的默认设置。在此版本中,- androidx是flutter create的唯一可用的选项。尽管不使用AndroidX的现有应用程序可以继续使用Flutter进行编译,但现在是迁移到新库的好时机。
如果您是Android Studio或IntelliJ用户,则会发现“热重装”功能更灵活。在进行此更改之前,如果您有任何分析错误,“热重装”将不会重装您的代码。但是如果分析错误不会影响您当前正在运行的代码(例如在单元测试中),那么这可能会令人沮丧。进行此更改后,分析错误不足以阻止Hot Reload正常工作,而取决于VM中的编译器错误。
如果您希望在Android Studio或IntelliJ的Flutter插件中更早地访问类的更改,我们现在为IntelliJ插件提供了一个开发通道,您可以选择该通道以更快地进行代码修改感知。在我们将它们更大范围的发布之前,会从Flutter开发人员那里收集有关更多的IDE集成新功能的反馈。如果您喜欢冒险,并希望向Flutter工具团队提供早期反馈,请立即注册!
对于Visual Studio Code用户,我们建议使用一个新的Dart命令:列出过期的软件包命令–pub outdated。
此命令旨在帮助您跟踪依赖项中的版本控制问题。
最后但并非是不重要的一点,如果您发现自己发生Flutter崩溃,这些工具将提示您提交错误。
团队会密切关注这些错误报告的严重性和频率,因此请在出现提示时进行记录并提交。
用户的呼声: MGM and Superformula
当然,Flutter的存在是为了实现完美的应用程序体验。数字代理机构做得令人惊奇的事情之一就是Superformula,该公司最近与MGM Resorts合作,对其app进行了重大更新,并使用Flutter对其进行了完全重建。他们报告说:“将Flutter添加到我们的核心产品中,可以释放出更高的速度和灵活性,这对于我们的客户及其用户而言,都可以转化为真实的,可衡量的价值。”
Superformula与MGM Resorts设计团队合作,为所有主要的web,app和kiosk体验创建了一种新的MGM设计语言。通过较小的团队和全新的Flutter代码库,他们能够比以前更快地重建应用并交付到两个应用商店,从而使MGM的预订转换率提高了9%。
重大变化
与往常一样,我们尝试在每个Flutter的新版本中尽量减少重大更改的数量,同时平衡我们的能力,以确保Flutter提供直观,灵活的API来支持新平台上的新用法。在去年的一项用户调查中,您告诉我们,您可以容忍经过仔细考虑的,可以改进框架的重大更改。因此,我们将继续逐步改进API。这些是此版本中的重大更改。 #42100 使用pushReplacement时,运行先前路线的辅助动画 #45940弃用UpdateLiveRegionEvent #49389快速滚动时延迟图像解码 #49391文本选择溢出(Android) # 49771未为空画笔设置断言缓存提示 # 50318实时图像缓存 # 50354使用约束盒高度计算选择矩形,以确保它们保持在可见范围内 #50733在gen_l10n中生成消息查找 # 51435从RouteSettings移除isinitialroute #52781将mouse_tracking.dart移至渲染 # 44930Navigator 2.0:重构命令式api以便在新的导航系统中继续工作
结论
随着我们的移动支持不断成熟,同时我们使web更加接近生产质量,Flutter带来了解决我们行业数十年来一直困扰的问题的希望:如何从一个跨多个端的单一源代码构建出色的应用程序平台?凭借Flutter提供的所有力量和能力,我们认为我们正在沿着一个很好的途径回答这个问题。你要做些什么呢?