作者 / Chris Sells, Product Manager, Flutter developer experience

很高兴为大家带来 Flutter 1.17,这也是我们 2020 年的第一个稳定发布版本。

今年对每个人来说都是充满挑战的一年。我们的目标是每季度发布一次稳定版,由于我们一直在针对新的发布流程调整基础设施,本次版本发布有所推迟。然而品质依然是我们的第一要务,新的版本发布流程将提升我们为稳定分支提供高质量热修复的能力。本次发布的版本包含大量的修复,自 1.12 稳定版发布以来,我们已经解决了 6,339 个 Issue,这是史无前例的大进展。而这很大程度上要归功于我们与 Nevercode 的合作,在用户提出问题时我们可以更快地响应。截至现在,我们已经解决的 bug 数量超过新增数量,报错总数减少了大约 800 个。这些 bug 中相当的一部分已通过合并 3,164 个 pull request 进行了修复,它们来自 231 位贡献者。这些数据都令人振奋,我们也衷心感谢大家在这个特殊时期的勤奋工作和持续贡献。

  • 与 Nevercode 的合作

    https://blog.codemagic.io/flutter-and-codemagic-join-forces-on-github/

如果您想查看我们在这个版本中合并的所有 pull request,请前往 flutter.cn 了解详情。除了品质方面的改进,我们还设法在这个版本中加入了一些新功能,包括 iOS 系统中的 Metal 支持、全新的 Material 组件、全新的网络跟踪工具等等。这个版本还包括了 Dart 2.8,请阅读今天发布的二条文章详细了解。

移动端性能和文件体积优化

性能和内存方面的整体优化是 1.17 版的重点之一。只需将您的工程升级到使用 Flutter 1.17,您的用户就能体验到更快速流畅的动画、更小巧的应用尺寸,以及更低的内存占用。在默认的导航场景下 (不包含透明图层内容的导航路径) 1.17 版的速度提升了 20%-37%。简单 iOS 动画的 CPU/GPU 占用可减少高达 40%,具体的减少量取决于硬件 (详见 PR 14104 和 PR 13976)。

  • 导航速度提升

    https://github.com/flutter/flutter/pull/48900

  • PR 14104

    https://github.com/flutter/engine/pull/14104

  • PR 13976

    https://github.com/flutter/engine/pull/13976

得益于我们的多项修复工作,新版本还在应用体积上做出了可观的改进。比如 Flutter Gallery 范例应用的 Android 版本在去年年底是 9.6MB,现在则是 8.1MB,体积减少了 18.5%。

  • 我们做出的多项修复

    https://github.com/dart-lang/sdk/commit/f56b0f690789b6f0e2e5bc1340abf4eba414b7a0

    https://github.com/dart-lang/sdk/commit/a2bb7301c5795e6b28089a8dc96e6ab5ca798e22

    https://github.com/dart-lang/sdk/commit/d77f4913a18ecce8c4be95cbaa4299ff1521dc10

    https://github.com/dart-lang/sdk/commit/e2faac751e1ef3707730e6e48f4d8f22ecbf35c3

    https://github.com/dart-lang/sdk/commit/8e7ffafbafc8203361111ddcafe0e0fcc372edf8

内存使用方面也有明显的优化,例如在快速滚动大型图片时内存占用减少了 70%,进而提升性能,具体提升的程度取决于设备内存的大小。

  • 优化内存占用

    https://github.com/flutter/engine/pull/14265

△ 测试应用的内存占用量随着 PR 合并的变化 (竖条越短内存占用越少)

不过最大的性能提升来自在 iOS 系统中实现对 Metal 的支持。

Metal 将 iOS 性能提升 50% 

Apple 的 Metal API 使开发者几乎直接访问底层 GPU,它也是 Apple 推荐使用的图形 API。在支持 Metal 的 iOS 设备上,Flutter 将默认使用 Metal,使得应用在绝大多数情况下都运行得更快,渲染速度平均提升约 50% (具体取决于设备的工作负载)。

  • 渲染速度平均提升约 50%

    https://github.com/flutter/flutter/issues/53768

△ 测试 iOS 应用在 OpenGL 和 Metal 下的帧渲染时间 (值越低越好)

对于那些不完全支持 Metal 的设备 (使用 A7 之前的处理器或 iOS 10 之前系统的设备),Flutter 会和以前一样使用 OpenGL,在这些设备上实现原生渲染速度。更多详情,请查看 Flutter wiki 上的 iOS Metal 常见问题解答。

  • iOS Metal 常见问题解答

    https://github.com/flutter/flutter/wiki/Metal-on-iOS-FAQ

Material widgets: NavigationRail, DatePicker, 以及更多

基于多方用户的反馈,我们也在持续推进 Material 设计系统在 Flutter 中落地。在新版本中我们加入了 NavigationRail,这是一个新的 widget,提供了响应式的应用导航模型。它由 Google Material Design 团队设计并实现。NavigationRail 非常适合可以在移动和桌面设备之间切换的应用,当您的应用所在的屏幕尺寸增大时,您可以非常容易地从 BottomNavigator 切换成 NavigationRail。

  • NavigationRail API

    https://master-api.flutter-io.cn/flutter/material/NavigationRail-class.html

  • Material 组件: NavigationRail

    https://material.io/components/navigation-rail

△ 新加入的 NavigationRail widget

您可以在 web_dashboard 样例或者 DartPad 中实际体验 NavigationRail。

  • web_dashboard 样例

    https://github.com/flutter/samples/tree/master/experimental/web_dashboard

  • DartPad

    https://dartpad.cn/b9c6cd345fd1cff643353c1f4902f888

除了加入新的 widget 之外,新版本还更新了 Material DatePicker 以及修正了文字选择菜单 widget 的溢出显示问题。

  • DatePicker

    https://api.flutter.dev/flutter/material/showDatePicker.html

△ 新的 Material DatePicker widget

DatePicker 基于更新过的 Material 设计指南引入了新的视觉设计,并新增了文本输入模式。详情请阅读 Material DatePicker 改版文档。

  • Material 设计指南

    https://material.io/components/pickers/#mobile-pickers

  • Material DatePicker 改版文档

    https://flutter.dev/go/material-date-picker-redesign

△ Android 上新版文字选择悬浮菜单

△ iOS 上新版文字选择悬浮菜单

如上图,当按钮总长度超过了显示范围时,Android 和 iOS 中的文本选择菜单保真度也得到了提高。菜单文本越长,这项更新越显著。

  • Android 版文本选择菜单

    https://github.com/flutter/flutter/pull/49391

  • iOS 版文本选择菜单

    https://github.com/flutter/flutter/pull/54140

另外,全新的 Animations Package,虽然并没有被包含进 Flutter 1.17 版本中,但也已同期发布。它实现了新的 Material 动效规范。

  • 全新的 Animations Package

    https://pub.flutter-io.cn/packages/animations

  • 新的 Material 动效规范

    https://material.io/design/motion/the-motion-system.html

△ Animations Package 中的容器转场动画

在《实现动效太难了?试试 Material Design》一文中,Material Design 团队给出了组件与全屏视图之间的四种转场模式: 容器变换、共享轴、淡入淡出和弹出效果。虽然 Flutter 一直就可以实现这些动效,但 Animations Package 让您可以更轻松地实现它们。今天就在应用里试试这些动效,让您的用户们眼前一亮吧!

Material 文字缩放: 现代化 Flutter 文字主题

在新版本中,Flutter 团队在不破坏现有 Flutter 应用的同时,完成了对 2018 年 Material Design 规范文字排版缩放 (Type Scale) 的实现。2018 年 10 月,我们在 PR 22330 中添加了对新配置 (而不是新名称) 的可选支持。现有的文本样式名称没有更改,因为这属于重大的 API 更改,可能会影响到大多数应用。Flutter 1.17 更新了 TextTheme API,以遵循当前的 Material 规范,但保留了旧的名称,从而不影响您的代码。由于旧的名称已经被废弃,您将收到 warning 提示,建议采用新的名称。

  • Material Design: 文字缩放排版

    https://material.io/design/typography/the-type-system.html#type-scale

  • PR 22330

    https://github.com/flutter/flutter/pull/22330

2018 年 Material TextStyle 的名称和配置汇总如下表所示。

Material Design 规范中称为 body1 和 body2 的 TextStyle 在 Flutter TextTheme API 中被称为 bodyText1 和 bodyText2。同样的,在规范中称为 H1-H6 的 TextStyle,在 TextTheme API 中称为 headline1-headline6。

在 Flutter 中使用 Google Fonts

文本和字体总是密不可分,如果新的 Material 文字缩放实现让您眼前一亮,那么您可能也会对新的 Google Fonts for Flutter v1.0 颇感兴趣。

  • Google Fonts for Flutter v1.0

    https://medium.com/flutter/introducing-google-fonts-for-flutter-v-1-0-0-c0e993617118

△ 在 Flutter 应用中轻松使用 Google Fonts

开发者可以通过 Google Fonts 在应用中轻松尝试和使用 fonts.google.com 中的字体。当应用准备发布时,开发者也可以决定是通过 API 来下载字体,还是在应用包中直接嵌入字体。

无障碍功能和国际化

最后是我们持续关注的课题——无障碍功能。我们认为,让 Flutter 应用可以服务最为广泛的受众是我们的首要任务之一。在新版本中,我们做了全面的工作,对滚动、文本框以及其他输入 widget 的无障碍功能进行了修复。GitHub 上有我们在这个版本中完成修复的无障碍功能完整列表。我们希望开发者能多多测试自己应用的无障碍功能,并且随着这次版本还发布了一些推荐的最佳实践供大家参考。

  • GitHub 上的无障碍修复完整列表

    https://github.com/flutter/flutter

  • 无障碍功能最佳实践

    https://flutter.dev/docs/development/accessibility-and-localization/accessibility

在国际化方面,我们一直在处理一些影响三星键盘 IME 的问题,这影响了许多东亚语言的文字输入。现在我们很高兴地宣布这个问题已经解决。各国开发者,尤其是韩国的开发者会在这个版本中发现不少喜人的变化。

  • 三星键盘问题 (已修复)

    https://github.com/flutter/flutter/issues/42273

工具: Dart DevTools 支持 Flutter

将当前版本的 Dart DevTools 替换成新的 Flutter 版本,这一进程通过 Flutter 1.17 已经接近完成。如果您想试试新的 Flutter 版 Dart DevTools,请在启动 DevTools 后点击右上角的 Beaker (烧瓶) 图标。

由 Flutter 实现的 Dart DevTools 预发布版本带来了诸多改进,其中全新的 Network (网络) 选项卡最为重要。

如果您在 Dart DevTools 的预发布版本中没有看到 Network 选项卡 (比如,您是通过命令行来使用 DevTools),可以通过如下命令手动更新它:

$ pub global activate devtools

在按下 Record (录制) 按钮后, Network 选项卡会显示您的 Flutter 应用的网络流量情况。如果您想在应用启动时就立即开始监测网络流量,可以在您的 main() 方法中加入这行代码:

void main() {// enable network traffic loggingHttpClient.enableTimelineLogging = true;runApp(MyApp());
}

除了 Dart DevTools 的更新之外,这个版本还实验性地增加了 "快速启动" 选项,当您调试 Android 版 Flutter 应用时,其启动速度可以提升高达 70%。您可以通过 flutter run --fast-start -d <your Android device> 来启用这个选项。这个选项会安装一个只依赖您的插件代码的通用 Android 应用,而不包含任何 Dart 代码或资源。这会让重复运行的 flutter run 命令更快地启动,因为修改 Dart 代码或资源并不需要重新构建 APK。和通常的启动选项不同,快速启动选项将您的应用绑定到了一个通用的 Android "容器" 中,实际上并不会在您的设备上安装。在一些情况下,比如您使用的插件访问了后台执行的内容,快速启动选项将不起作用。如果您觉得 Android 调试的启动时间漫长得让人头疼,不妨试试这个全新的选项吧。

  • 快速启动选项

    https://github.com/flutter/flutter/pull/46140

如果您的目标平台是 Android,您会注意到,现在创建新的 Flutter 项目时只提供 AndroidX 选项。AndroidX 库提供了被称为 Android Jetpack 的高级 Android 功能。在上一个版本中,我们不再支持原先的 Android Support Library,转而将 AndroidX 作为所有新项目的默认选项。在 Flutter 1.17 中,flutter create 命令只有 --androidx 这一个选项。虽然现有的不使用 AndroidX 的 Flutter 应用依然可以编译,但是时候迁移至 AndroidX 了。

  • AndroidX

    https://developer.android.google.cn/jetpack/androidx

  • Android Jetpack

    https://developer.android.google.cn/jetpack/

如果您使用 Android Studio 或 IntelliJ,您会发现 Hot Reload (热重载) 功能的容错性更强了。在本次更新之前,如果您的应用出现了任何分析错误,Hot Reload 将不会重新加载您的代码。如果分析错误并不涉及您当前正在运行的代码 (比如在单元测试中),会让人很崩溃。但通过本次更新,Hot Reload 将不再受分析错误影响,而取决于 VM 中的编译错误。

  • 本次更新

    https://groups.google.com/forum/m/#!topic/flutter-announce/tTgQcTgqrKg

如果您想更早地体验 Android Studio 或 IntelliJ 的 Flutter 插件中类似的改进,我们现在也为 IntelliJ 插件提供了 dev 渠道,您可以选择加入,以更快获取到这些更新。这个 dev 渠道的目标是在公开发布新 IDE 集成功能前通过 Flutter 开发者收集反馈。如果您希望尝鲜并且愿意向 Flutter 工具团队提供早期反馈,请即刻加入我们的体验计划!

  • IntelliJ 插件的 dev 渠道

    https://groups.google.com/forum/m/#!topic/flutter-announce/tTgQcTgqrKg

  • 加入体验计划

    https://groups.google.com/forum/m/#!topic/flutter-announce/tTgQcTgqrKg

如果您使用的是 Visual Studio Code,我们推荐使用新的 Dart: List Outdated Packages 命令来运行新的 pub outdedated 命令。详情请见 Dart 2.8 发布 (今日微信二条文章)。

这个命令用于厘清依赖项中的版本问题。

最后值得一提的是,现在当 Flutter 崩溃时,工具会提示您上报这个 bug:

我们的团队会密切关注这些错误报告的严重程度和出现频率,所以当这些提示出现时,请提交 bug 给我们。

案例分享: MGM 和 Superformula

Flutter 的存在是为了实现精美的应用体验。数字开发商 Superformula 最近就完成了一件精彩的作品: 他们最近与 MGM Resorts (美高梅酒店集团) 合作,完全使用 Flutter 对其移动应用进行了重构。他们反馈道,"在核心产品中引入 Flutter,为我们的客户和他们的用户带来了更快的速度和更高的灵活性,从而为他们带来了真正的、可衡量的价值。"

  • Superformula

    https://superformula.com/flutter/

  • MGM Resorts 重构移动应用

    https://www2.mgmresorts.com/app/

Superformula 与 MGM Resorts 设计团队合作,为所有主要的网络、移动和店头体验打造了全新的 MGM 设计语言。这个规模不大的团队使用全新的 Flutter 源码库更快地完成了应用改版,并在两个应用商店上架,使得 MGM 的预订转化率提高了 9%。

重要改动 (Breaking Changes)

和以往一样,我们会尽量减少每一个 Flutter 新版本中的重要改动,我们会反复权衡利弊,确保 Flutter 能够提供直观、灵活的 API,能够在新平台上支持新的开发习惯。在去年的用户调查中,开发者表示可以接受经过深思熟虑的、能够改善框架的重要改动。因此,我们正在稳步、审慎地更新 API。Flutter 1.17 中的重要改动包括:

  • #42100 在使用 pushReplacement 时使用之前的路径运行后续动画

  • #45940 弃用 UpdateLiveRegionEvent

  • #49389 在高速滚动时推迟图像解码

  • #49391 文本选取溢出 (Android)

  • #49771 断言缓存提示未针对空绘图对象进行设置

  • #50318 实时图像缓存

  • #50354 使用构造块高度计算选区范围,确保其维持在可视范围内

  • #50733 在 gen_l10n 中生成消息查询

  • #51435 从 RouteSettings 中移除 isinitialroute

  • #52781 将 mouse_tracking.dart 移动到 rendering

小结

随着移动端支持的不断成熟,以及 web 端逐步稳定,Flutter 有望解决困扰行业几十年的问题: 如何通过单一代码库构建出多平台部署的优秀应用?Flutter 成长至今的表现让我们相信,我们正走在正确的道路上,也期待着您精彩的 Flutter 作品!

END
最后说个题外话,相信大家都知道视频号了,随着灰度范围扩大,越来越多的小伙伴都开通了视频号。小詹也开通了一个视频号,会分享互联网那些事、读书心得与副业经验,欢迎扫码关注,和小詹一起向上生长!「没有开通发布权限的尽量多互动,提升活跃度可以更快开通哦」(听我一分钟,生活更轻松)(扫码回复 1024 即可领取IT资料包)

Flutter 1.17 | 2020 首个稳定版发布!相关推荐

  1. Sublime Text 4首个稳定版发布:全新UI、多选项卡、支持GPU渲染

    作者 | oschina2013 来源 | OSC开源社区 Sublime Text 4 首个稳定版终于来了!此版本除了引入不少改进外,对于 Sublime Text 一直以来的长处也在加以完善.开发 ...

  2. micropython开发idethonny_Thonny 3.0 首个稳定版发布,一个面向初学者的 Python IDE

    艾米视频电脑版下载,创意表白,蒙口羽绒服,步步高官网,韩剧 black,孙中山后代 在您的既有IT基础设施上按需构建人工智能更高效 Thonny 3.0.1 发布了,这是 Thonny 3.0 系列发 ...

  3. 雷军喜提第四家上市公司;梨视频 App 被全网下架;Flutter 1.17 稳定版发布 | 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦 ...

  4. 库克回应 iPhone 11 系列不支持 5G;哈啰 App 被下架;Flutter 1.9 稳定版发布 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  5. 腾讯云推出首款自研服务器星星海;苹果新款Mac Pro整套配齐超30万;Fedora 31稳定版发布|极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  6. 10月30日科技资讯|腾讯云推出首款自研服务器星星海;苹果新款Mac Pro整套配齐超30万;Fedora 31稳定版发布|极客头条

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 整理 | 郭 ...

  7. 10月17日科技资讯|拼多多用户超 4 亿;苹果欲研发“智能戒指”;MySQL 8.0.18 稳定版发布 | 极客头条

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 整理 | 胡 ...

  8. 微信推出“腾讯QQ”小程序;马化腾又要发红包;GitLab 12.5 稳定版发布| 极客头条...

    整理 | 屠敏 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注 ...

  9. python3最新稳定版本-Python 3.9.0 稳定版发布

    新酷产品第一时间免费试玩,还有众多优质达人分享独到生活经验,快来新浪众测,体验各领域最前沿.最有趣.最好玩的产品吧~!下载客户端还能获得专享福利哦! 原标题:Python 3.9.0 稳定版发布 IT ...

最新文章

  1. 进程、线程、多线程相关总结
  2. matlab 人群仿真,用simulink如何实现人群搜索算法的pid参数整定
  3. [Google App Engine] Hello, world!
  4. all any 或 此运算符后面必须跟_PHP程序员必须会的 45 个PHP 面试题(第一部分)...
  5. CCTMXTiledMap的使用
  6. 给你的主机防火墙添加l7-filter
  7. Gh0st源代码详细剖析
  8. VS2005的depends工具 (分析EXE)
  9. C#调用ORACLE存储过程返回结果集及函数
  10. 在JavaScript中创建命名空间的几种写法
  11. C++中数字和字符串的转换
  12. 神州数码java面试_神州数码面试题及答案
  13. Bootstrap实战 - 评论列表
  14. 硬盘损坏,怪我咯?3分钟拯救硬盘里的小姐姐!
  15. Android H5视频全屏,自适应视频
  16. python实现触摸精灵功能_触摸精灵lua脚本实现微信群加好友功能
  17. CentOS 6.X yum源更新(阿里云默认最新更新为CentOS6.10)
  18. “下一代智能硬件Web应用防火墙”——创宇盾X完成统信互认
  19. JS显示团购剩下时间的代码整理
  20. 上海市专业计算机学校地址,上海计算机专业学校

热门文章

  1. 环境搭建之日志搜集/采集服务系统对比(logtail/hadoop/elk/splunk/appender)
  2. jupyter notebook的链接密码 token查询 以及 pycharm 如何使用 jupyter notebook
  3. 年轻程序员需要学习的5大经验
  4. MySQL之三范式:原子性 唯一性 避免数据冗余
  5. PHP的自动加载__autoload spl_autoload_register
  6. Git的remote
  7. jQuery的push
  8. 通信原理包络是什么意思_罗茨鼓风机的应用及原理
  9. 原生APP与web APP的区别
  10. python中gui实现一个登录界面_Python:简单的登陆GUI界面