Flutter 1.17 发布
北京时间 7日凌晨,谷歌更新了Stable channel的新版 Flutter 1.17。 谷歌透露:今年到目前为止,关闭的漏洞比打开的漏洞多,导致净减少了约800个问题。谷歌Flutter团队从231位贡献者那里合并了3,164个PR,从而修复了许多错误。
本次更新除了问题修复和优化外,包含了一些新功能,包括iOS上的Metal支持,新的Material组件,新的Network跟踪工具等等!此版本还包括Dart 2.8。
移动性能和尺寸改进
此版本的主要重点是性能和内存改进方面的总体工作。只需将您的应用程序升级到此版本,您的用户就会看到更快的动画,更小的应用程序和更低的内存利用率。在此版本中,默认导航情况(不透明的不透明路线)的速度将提高20%-37%
。对于简单的iOS动画,您还将看到最多减少40%的CPU / GPU使用率
,具体取决于硬件(在PR 14104和PR 13976中进行了详细介绍)。
此版本还提供了一个相当大的应用程序大小的改善是由于几个 补丁 是 添加 了一个大的结果。例如,Android的Flutter Gallery示例在2019年底为9.6MB,现在为8.1MB,减少了18.5%。
对于内存使用,此版本将快速滚动浏览大图像减少了70%的内存
,这也可能导致性能提高,具体取决于设备的内存量。
测试PR随时间合并的应用程序内存使用情况(条形越短越好)
但是,最广泛的性能改进是iOS中对Metal的支持。
Metal支持可将iOS的性能提高50%
苹果公司在iOS上对Metal的支持几乎可以直接访问底层GPU,并且是苹果公司推荐的图形API。在完全支持Metal的iOS设备上,Flutter现在默认情况下使用它,这使您的Flutter应用程序大多数时候运行得更快,平均将渲染速度提高了约50%(取决于您的工作量)。
测试OpenGL与金属的iOS应用程序框架渲染时间(越短的条越好) 对于不完全支持Metal的设备(A7处理器之前的版本或运行10之前的iOS版本的设备),Flutter会像过去一样使用OpenGL,从而为较旧的设备提供本地渲染速度。有关更多详细信息,请在Flutter Wiki上查看iOS上的Metal常见问题。
材质小部件:NavigationRail,DatePicker等
改进了Flutter中实施的材料设计系统。在此版本中,添加NavigationRail
了一个新的小部件,该小部件提供了响应式应用程序导航模型。它是由Google Material Design团队设计和实施的。该NavigationRail是伟大的,可因为它是很容易在一个交换的移动和台式机外形之间切换应用程序BottomNavigator为您的应用程序的屏幕尺寸的增大。
新的NavigationRail小部件
要查看NavigationRail实际效果,请查看web_dashboard示例或在DartPad上尝试。 除了新的小部件,此版本还包括“材质” DatePicker和“文本选择”溢出小部件的更新。
更新了Material DatePicker小部件
此DatePicker
版本包括新的视觉效果,以匹配更新的“材料”准则以及新的文本输入模式。您可以在“ 物料日期选择器重新设计”规范中阅读有关详细信息。
更新的文本选择在Android上溢出
iOS上的更新文本选择溢出
当按钮的长度比没有溢出时可以显示的时间长时,文本选择菜单现在可以提高Android和iOS的保真度。这在菜单项单词可能更长的语言环境中尤其明显。 在与Flutter 1.17相同的时间范围内但带外交付,Flutter团队还交付了新的Animations软件包,该软件包提供了实现新的Material motion规范的预构建动画。
来自Animations包的Container转换的示例
在“实现运动”博客文章中,材料设计团队定义了四个过渡模式,用于描述组件和全屏视图之间的动画:容器变换,共享轴,淡入和淡入。尽管这些动画在Flutter中始终可用,但是Animations软件包使实现它们变得相当容易。将它们放到您的应用中,今天就让您的用户满意!
实质性文本比例:使Flutter文本主题现代化
在此版本中,Flutter团队完成了2018 Material Design规范的Type Scale部分的实现,同时没有破坏现有的Flutter应用程序。2018年10月的PR 22330中增加了对新配置的选择加入支持,但不对新名称提供支持。现有的文本样式名称未更改,因为这样做是一个重大的API更改,可能会影响大多数应用程序。此版本更新了TextTheme API以匹配当前的Material规范,但保留了旧名称,以使您的代码不会中断。但是,旧名称已被弃用,因此您将收到警告,以鼓励您采用新名称。 下表总结了2018 Material TextStyle的名称和配置。
请注意,TextStyles
所谓的body1和body2在材料设计规范被称为bodyText1和bodyText2颤振的TextThemeAPI。同样,TextStyles所谓的H1-H6说明书中被称为headline1-headline6中TextThemeAPI。
Google字体用于Flutter
文字和字体齐头并进,因此,如果您对新的Material Text Scale实现感到兴奋,那么您可能也会对新的Flutter v1.0版Google字体感到兴奋。
Google字体易于在Flutter应用中使用
Google字体允许开发人员在其应用中轻松地尝试和使用fonts.google.com中的任何字体。当应用程序准备发布时,开发人员将决定用户是否通过从API下载字体来接收字体,或者它与应用程序包预先捆绑在一起。
可访问性和国际化
最后,可访问性是Flutter团队持续关注的一个重要领域,Flutter应用程序对于尽可能广泛的受众可用是一个优先事项。在此发行版中,已完成了全部工作,包括滚动,文本 字段和其他输入小部件的可访问性修复程序。您将在GitHub的该版本中看到有关可访问性问题的完整列表。Flutter团队鼓励您测试自己的应用程序的可访问性,并且还通过一些推荐的最佳实践更新了此版本中的文档。 在国际化方面,Flutter团队一直在研究一些影响三星键盘输入法的问题,这些问题影响了各种东亚语言的文本输入。
工具:Dart DevTools移植到Flutter,Android快速入门等
此版本将Dart DevTools的当前版本换成新的Flutter版本。如果想尝试一下,可以启动DevTools并单击DevTools右上角的“烧杯”图标。
当您使用Flutter实现的Dart DevTools的预发布版本时,您可能会注意到各种改进,但是最大的改进是新的“ 网络”选项卡。
如果未在Dart DevTools的预发行版中看到“网络”选项卡(例如,如果从命令行运行它),则可以使用以下命令手动更新它: $ pub globalactivate devtools 按下“记录”按钮后,“网络”选项卡将显示Flutter应用程序的网络流量。此外,如果您希望从启动应用程序时立即开始捕获网络流量,则可以在main()方法中包括以下代码行:
代码语言:javascript复制void main(){
//启用网络流量日志记录
HttpClient.enableTimelineLogging = true;
runApp(MyApp());
}
除了更新的Dart DevTools
,此版本还增加了对实验性“快速启动”选项的支持
,该选项可让您在定位Android时以高达70%的速度启动Flutter应用程序调试。您可以通过访问此选项flutter run —-fast-start -d <your Android device>
。此选项将安装仅依赖于您的插件代码(不包括任何Dart代码或资产)的通用Android应用。这允许重复flutter run
命令的启动速度更快,因为对Dart代码或资产的更改不需要重新构建APK。此选项将您的应用程序捆绑到实际上未在您的设备上安装的通用Android“包装器”中,这与正常的启动选项不同。此外,在某些情况下它不起作用,例如,当您使用访问后台执行的插件时。另一方面,如果您的Android调试启动时间让您失望,请尝试一下。
如果您以Android为目标,则要注意的另一个变化是,现在创建新的Flutter项目时,AndroidX是唯一的选择。AndroidX库提供了称为Android Jetpack的高级Android功能。在上一个版本中,Flutter团队弃用了原始的Android支持库,并将其移至AndroidX作为所有新项目的默认设置。在此版本中,- androidx标志到flutter create
现在是唯一可用的选项。尽管不使用AndroidX的现有应用程序可以继续使用Flutter进行编译,但现在是迁移到新库的好时机。
如果您是Android Studio或IntelliJ用户,则会发现“热重装”功能更具弹性。在进行此更改之前,如果您有任何分析错误,“热重装”将不会重装您的代码。如果分析错误不会影响您当前正在运行的代码(例如在单元测试中),那么这可能会令人沮丧。进行此更改后,分析错误不足以阻止Hot Reload正常运行,而取决于VM的编译器错误。
如果您希望在Android Studio或IntelliJ的Flutter插件中更早地访问此类更改,Flutter团队现在为IntelliJ插件提供了一个开发通道,您可以选择该通道以更快地进行更新。开发通道的目标是在Flutter团队将它们广泛发布之前,从Flutter开发人员那里收集有关IDE集成新功能的反馈。如果您喜欢冒险,并希望向Flutter工具团队提供早期反馈,请立即注册!
对于Visual Studio Code用户,建议使用新的Dart:列出过期的软件包命令,该命令将运行新的“ pub outdated”命令。
此命令旨在帮助您跟踪依赖项中的版本控制问题。 最后但并非最不重要的一点是,如果您发现自己发生Flutter崩溃,这些工具将提示您提交错误。
团队会密切关注这些错误报告的严重性和频率,因此请在出现提示时进行记录。
Customer Shoutout: MGM and Superformula
当然,Flutter的存在是为了实现美丽的应用程序体验。数字代理商做得令人惊奇的事情之一就是Superformula,该公司最近与MGM Resorts合作,对其移动应用程序进行了重大更新,并已在Flutter中对其进行了完全重建。他们报告说:“将Flutter添加到核心产品中,可以释放出更高的速度和灵活性,这对于客户及其用户而言,都可以转化为真实可衡量的价值。”
Superformula与MGM Resorts设计团队合作,为所有主要的网络,移动和信息亭体验创建了一种新的MGM设计语言。通过较小的团队和全新的Flutter代码库,他们能够比以前更快地重建应用并交付到两个应用商店,从而使MGM的预订转换率提高了9%。
重大变化
与往常一样,每个新版本的Flutter中尽量减少重大更改的数量,这些是此版本中的重大更改。
- #42100 使用pushReplacement(…时,运行先前路线的辅助动画
- #45940弃用UpdateLiveRegionEvent
- #49389延迟快速滚动时的图像解码
- #49391文本选择溢出(Android)
- #49771 未为空画笔设置断言缓存提示
- #50318 实时图像缓存
- #50354 使用支杆盒高度计算选择矩形,以确保它们保持在可见范围内
- #50733在gen_l10n中生成消息查找
- # 51435从RouteSettings移除isinitialroute
- #52781将mouse_tracking.dart移至渲染
详细请至查看:https://medium.com/flutter/announcing-flutter-1-17-4182d8af7f8e