vlambda博客
学习文章列表

2020年度第一个稳定版本:Flutter 1.17,你想了解吗?

5 月 6 日,Flutter 发布了 2020 年第一个稳定的版本:Flutter 1.17。

在此简要了解记录一下新版本添加的新东西。

移动性能和尺寸改进

新版本中会看到更快的动画,更小的应用程序和更低的内存利用率。默认的路由导航情况,动画速率将提高 20%-37%,对于简单的 iOS 动画,您还将看到最多减少 40%的 CPU / GPU 使用率,具体取决于硬件。

减少了应用程序的大小,例如,Android 的 Flutter Gallery 示例在 2019 年底为 9.6MB,现在为 8.1MB,减少了 18.5%。

减少了内存占用,在快速浏览大图像时减少了 70%的内存,具体取决于设备的内存量,提高了性能。

Metal 支持将 iOS 的性能提高 50%

简要说说 Metal

Metal 是一个和 OpenGL ES 类似的面向底层的图形编程接口,通过使用相关的 api 可以直接操作 GPU。

Metal 是 iOS 平台独有的,意味着它不能像 OpenGL ES 那样支持跨平台,但是它能最大的挖掘苹果移动设备的 GPU 能力,进行复杂的运算,像 Unity 等游戏引擎都通过 Metal 对 3D 能力进行了优化, App Store 还有相应的运用 Metal 技术的游戏专题。

Metal 具有特点
  • GPU 支持的 3D 渲染

  • 和 CPU 并行处理数据 

  • 提供低功耗接口

  • 可以和 CPU 共享资源内存

层级关系如下图:

UIKit -> Core Graphics -> Metal/OpenGL ES -> GPU Driver -> GPU

2020年度第一个稳定版本:Flutter 1.17,你想了解吗?

苹果公司在 iOS 上对 Metal 的支持几乎可以直接访问底层 GPU,并且是苹果公司推荐的图形 API。在完全支持 Metal 的 iOS 设备上,Flutter 默认情况下使用它,从而使您的 Flutter 应用程序大多数时候运行得更快,平均使渲染速度提高约 50%(取决于您的工作量)。

2020年度第一个稳定版本:Flutter 1.17,你想了解吗?

对于不完全支持 Metal 的设备(A7 处理器之前的版本或运行 10 之前的 iOS 版本的设备),Flutter 会像过去一样使用 OpenGL,从而为较旧的设备提供原生渲染速度。

Material 控件:NavigationRail,DatePicker 等

NavigationRail

这是一个提供响应式应用程序导航模型的新小部件。它是由 Google Material Design 团队设计和实施的。NavigationRail 非常适合可以在移动和台式机尺寸之间切换的应用程序,因为随着应用程序屏幕尺寸的增加,它很容易换成 BottomNavigator。

2020年度第一个稳定版本:Flutter 1.17,你想了解吗?

Material DatePicker

2020年度第一个稳定版本:Flutter 1.17,你想了解吗?


还有菜单内的选项超出屏幕宽度时将会自动收起并可以通过与原生一致的操作切换,解决了某些语言中操作项的文字过长时布局溢出的问题。


2020年度第一个稳定版本:Flutter 1.17,你想了解吗?

Android

2020年度第一个稳定版本:Flutter 1.17,你想了解吗?

IOS

还有,新增 Animations 软件包,提供了实现新的 Material motion 规范的预构建动画。

2020年度第一个稳定版本:Flutter 1.17,你想了解吗?

Material 设计团队定义了四个过渡模式,用于描述组件和全屏视图之间的动画:容器变换,共享轴,淡入和淡出。

Material 文本比例:使 Flutter 文本主题现代化

Flutter 团队在兼容以前版本的 App 的前提下完整整合了 2018 标准的 Material Design 文本大小定义。原有的 TextTheme API 使用未受影响,但现在被标记为废弃,提醒开发者尽快迁移到新的标准。

在 Flutter 的 TextTheme 中,bodyText1 和 bodyText2 对应着 Material Design 的 body1 和 body2。类似的还有 H1-H6,对应 headline1-headline6。

Flutter 谷歌字体

之前我就觉得用 Google 字体真麻烦,后来没想到在这一版本直接集成进去了,看着挺开心的。

Google 字体允许开发人员在其应用中轻松地尝试和使用 fonts.google.com 中的任何字体。当应用准备发布时,开发人员将决定用户是否通过从 API 下载字体来接收字体,或在应用中内置提供这些字体。

由于 Flutter 1.17 刚出,考虑到有些插件的兼容性,我暂时还没有升级。

参考地址

https://medium.com/flutter/announcing-flutter-1-17-4182d8af7f8e

https://medium.com/dartlang/announcing-dart-2-8-7750918db0a



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