2020年5月6日,Flutter终于迎来的本年的第一个稳定版本:1.17.0
,距离上一个稳定版本的发布已通过去了将近5个月(146天)。受到世界范围的你我都知道的状况影响,今年的Google I/O也被取消,必定程度影响了本次版本的发布。同时在临近发布前出现了具备严重影响的BUG,也致使发布时间再次被推迟。html
那么1.17.0
到底更新了什么?是否是能再一次颠覆使用体验?可否让开发者再次真香?如下经过对Medium原文进行部分总结翻译以及补充,为各位进行解答~(若有错漏欢迎指出)(有英文原文没有的内容噢😉)android
本次Flutter版本的发布,开发团队将更多的时间用于构建新的发布流程架构。自上一次发布稳定版本以来,已解决了6339个问题(issue),分别从231位开源贡献者合并了3164个提交请求。得益NeverCode与团队的合做,今年团队在Flutter的仓库上关闭的issue比新增的issue更多,总数减小了约800个。与Flutter一同发布的还有Dart 2.八、iOS新增Metal渲染支持、新的Meterial组件和新的网络追踪调试工具等。git
性能及内存优化的工做是此次新版本的重点。升级到新版本后,用户将马上感觉到更流畅快速的动画、更小的应用大小以及更低的内存占用。如今通常的路由变换场景(非透明的路由过渡)将提速20%-37%。根据不一样设备硬件性能的不一样,在简单的iOS动画上能减小最多40%的CPU/GPU使用率(engine#14104 / engine#13976)。github
该版本还包含了大量的应用大小优化。例如官方的展现应用Flutter Gallery的Android应用包大小从9.6MB减少到了8.1MB(18.5%)。web
另外在内存使用率方面,带有图片的列表在快速滚动时形成的内存占用及波动一直是Flutter的痛点之一。该版本将快速滚动带图片(大图)列表场景的内存使用率下降了70%。shell
但,最值得说明的性能强力提高是对iOS Metal的支持。api
Metal是与iOS 8一同发布的API,具备兼顾图形与计算功能、面向底层、低开销的硬件加速[4]等优点。Flutter现已默认使用Metal,让用户应用的平均渲染速度加快了50%(由实际业务决定)。缓存
而在不支持Metal的设备上(A7处理器及iOS 10如下),Flutter将继续使用OpenGL进行渲染。 bash
NavigationRail
、DatePicker
、VisualDensity
及更多 Flutter团队正在持续地根据客户的反馈推动Flutter中Material Design的实现。本次由Material Design团队设计并实现了一个用于响应式App布局的路由组件NavigationRail
,该组件能与BottomNavigator
快速转换,在设备尺寸变大时随之改变,能很好地适应移动端与桌面版的布局。网络
快速体验 NavigationRail
能够访问 demo 或在 dartpad 上进行尝试。
此外,基于Material Design的日期选择器DatePicker
也已一同发布。新的DatePicker
使用了符合Material指导的视觉效果,经过详情文章能够了解到更多。
VisualDensity
也是新引入的内容,其指代的是Material Design中各种组件的视觉密度。经过调整它可使得标准Material组件之间更加紧凑或疏远。新版本在ThemeData
中引入了设置(ThemeData.visualDensity
)。详细介绍请移步文档。
文字选择菜单也已针对平台作了相应的改进。如今菜单内的选项超出屏幕宽度时将会自动收起并能够经过与原生一致的操做切换,解决了某些语言中操做项的文字过长时布局溢出的问题。
与1.17一块儿,Flutter团队一同发布了基于Material 运动系统的预设动画组件包。
在Material的运动系统介绍文章中,Material Design团队定义了从组件到全屏视图的四种动画变化类型:容器转换、共轴转换、交叉渐变、渐变。尽管Flutter本来就能够实现对应效果,但该动画组件包能让开发者更轻松地实现它们。
在该版本的发布中,Flutter团队在兼容之前版本的App的前提下完整整合了2018标准的Material Design文本大小定义。原有的TextTheme
API使用未受影响,但如今被标记为废弃,提醒开发者尽快迁移到新的标准。
在Flutter的TextTheme
中,bodyText1
和bodyText2
对应着Material Design的body1
和body2
。相似的还有H1-H6
,对应headline1-headline6
。
若是你对新的Material Design文字缩放感兴趣,那么相信你对在Flutter中使用GoogleFonts
也抱有很是大的期待。
GoogleFonts
让开发者能轻易地在开发的App中体验和使用fonts.google.com
上的全部字体,开发者能够选择让用户直接经过API下载字体,或在应用中内置提供这些字体。
Flutter团队持续关注的另外一个方向即是辅助功能,它将让Flutter应用的应用范围更加普遍而且为特定场景增长了可用性。在该版本中针对滑动、文字、输入框及其余输入组件修复了大量问题。官方推荐开发者根据文档中更新的最佳实践去测试本身的应用。
在国际化方面,团队针对三星输入法对许多东亚语言的影响完成了修复。思密达开发者们应该会庆祝这些改动🤣
该版本的发布伴随着即将发布的与Flutter进行整合的Dart DevTools,若是你想马上尝试它,请启动DevTools并点击右上角的"beaker"图标。
在预发布的DevTools中,你会看到多项优化点,但最重要的一项即是Network
(网络)选项卡。
网络选项卡如今能够查看来自应用的网路请求,方便快速地排查请求问题。若是开发者在DevTools中没有找到该选项卡,能够经过如下命令来进行升级或启用:
$ pub global actiat devtools
复制代码
默认状况下,网络选项卡会在你点击"Record"(开始记录)后显示你的网络活动,但若是开发者但愿从App启动开始时就记录,能够在main()
入口中使用如下方法:
void main() {
// 启用网络请求输出
HttpClient.enableTimelineLogging = true;
runApp(MyApp());
}
复制代码
新的DevTools带来了另外一项实验性功能:安卓“快速启动”,让开发者开启调试的速度加快70%。这项功能能够经过flutter run --fast-start -d <your Android Device>
开启。使用功能时,一个仅基于平台代码、不含dart代码和资源变更的“壳”APK包将被安装到设备上。因为修改dart代码或资源并不须要APK从新构建,这会让flutter run
更快地启动。与传统的启动模式不一样,这个功能会将你的代码包装在一个壳中运行。在某些状况下这项功能将没法生效,例如在应用使用了原生插件调用了方法。
从该版本起,建立新的Flutter应用时,将仅容许建立使用AndroidX的应用。团队已将全部的support API标记为废弃,在建立新项目时--android
参数是惟一有用的参数。虽然support版本的应用仍然能正常打包,但此时不迁移更待什么时候?
若是开发者是Android Studio或者IntelliJ用户,会发现热重载变得更为灵活了。在之前当分析器认为代码中存在错误(error)时,将阻止开发者热重载。当这些错误并不对你当前正在开发或调试的功能形成影响时,会让你花费更多的时间去处理这些错误,让人恼火。自此分析器再也不有权利阻止热重载的进程,而交给VM编译过程来进行判断。
这些改动都发布在了对应的dev分支,若是开发者想尽快参与到其中,能够经过此处报名。经过参与新版本的测试更频繁的更新,与Flutter团队反馈使用感想,将让编译器插件更加健壮。
对于VS Code开发者,团队推荐一项新的功能:Dart: List Outdated Packages(pub outdated
)。它能够帮助开发者排查依赖版本不匹配致使的问题。
最后,若是开发者碰到了Flutter crash,工具将引导开发者以正确的方式上报异常,Flutter团队会密切关注这类错误的严重程度和频率。
该版本中包含如下重大不兼容API改动:
RouteSettings
中移除isInitialRoute
mouse_tracking.dart
移动至rendering2020年注定是不平凡的一年,对于Flutter来讲也不例外。但Flutter Team仍然在谷爹的强力支持下坚持了下来,而且作了巨量的工做,向团队致敬!
最后照例欢迎各位加入Flutter Candies,一块儿制造可爱好用的🍬。 (QQ群:181398081)
References: