多年之前,当咱们讨论移动跨平台开发时,总会有人提出跨平台应用程序速度慢的刻板问题。如今,使用Flutter自带的渲染引擎咱们彻底能够开发出媲美原生应用的用户体验,同时一套代码便可同时运行在iOS、Android和浏览器等多个平台,也带来了应用开发效率的提高。html
做为目前最流行的移动跨平台技术方案,最近两年,Flutter在移动跨平台开发方面的成长能够说是有目共睹的。进入2020年,Google官方在前不久发布了2020年的更新计划,并在前两天更新了Flutter 1.17版本,这是2020年的第一个稳定版本。android
按照官方的说法,Flutter 1.17版本关闭了自Flutter 1.12版本的6,339个问题,从231位贡献者那里合并了3164个PR,并修复了许多错误。除了质量改进以外,Flutter1.17版本还在增长了一些新功能,包括iOS上的Metal支持,新的Material组件,新的Network跟踪工具等等!git
下面,就让咱们具体来看一下Flutter 1.17版本带来的一些新特性吧!github
此版本最重要的地方就是在性能和内存方面进行的改进,所以,只需将您的应用程序升级到此版本,就会看到更快的动画,更小的应用程序和更低的内存利用率。通过测算,在此版本中,默认导航状况(不透明的不透明路线)的速度将提升20%-37%。对于简单的iOS动画,您还将看到最多减小40%的CPU / GPU使用率,具体取决于硬件。详细参考数据:web
除此以外,使用此版本打的包显著的减小了应用程序的大小。例如,Android的Flutter Gallery示例在2019年末为9.6MB,如今为8.1MB,减小了18.5%。对于内存使用,此版本将快速滚动浏览大图像时减小了70%的内存,具体取决于设备的内存量,提升了性能,优化内存占用。下面是一张对比图。浏览器
Apple 提供的 Metal API 可使开发者能够直接访问底层 GPU,它也是 Apple 推荐使用的图形 API。在支持 Metal 的 iOS 设备上,Flutter 将默认使用 Metal,使得应用在绝大多数状况下都运行得更快,渲染速度平均提高约 50% (具体取决于设备的工做负载),具体参考渲染速度平均提高约 50% 缓存
而对于那些不彻底支持 Metal 的设备, 如使用 A7 以前的处理器或 iOS 10 以前系统的设备,Flutter 会和之前的版本同样使用 OpenGL进行渲染,在这些设备上实现原生渲染速度。对于Metal,能够参考iOS Metal 常见问题解答。bash
基于多方用户的反馈,Flutter也在持续推动 Material 设计系统在 Flutter 开发中落地。在新版本中,咱们加入了 NavigationRail组件,这是一个新的 widget,提供了响应式的应用导航模型。它由 Google Material Design 团队设计并实现。 NavigationRail 很是适合在移动和桌面设备之间切换的应用,当您的应用所在的屏幕尺寸增大时,您能够很是容易地从 BottomNavigator 切换成 NavigationRail。网络
您能够在 web_dashboard 样例或者 DartPad 中实际体验 NavigationRail。除了新增了新的 widget 以外,新版本还更新了 Material DatePicker 以及修正了文字选择菜单 widget 的溢出显示问题。 工具
另外,在Flutter 1.17中,还增长了新的Animations软件包,该软件包提供了实现新的Material motion规范的预构建动画。
在新版本中,Flutter 团队在不破坏现有 Flutter 应用的同时,完成了对 2018 年 Material Design 规范文字排版缩放 (Type Scale) 的实现。2018 年 10 月,咱们在 PR 22330 中添加了对新配置 (而不是新名称) 的可选支持。现有的文本样式名称没有更改,由于这属于重大的 API 更改,可能会影响到大多数应用。 Flutter 1.17 更新了 TextTheme API,以遵循当前的 Material 规范,但保留了旧的名称,从而不影响您的代码。因为旧的名称已经被废弃,您将收到 warning 提示,建议采用新的名称。2018 年 Material TextStyle 的名称和配置汇总以下表所示。
文本和字体老是密不可分,若是新的 Material 文字缩放实现让您眼前一亮,那么您可能也会对新的 Google Fonts for Flutter v1.0 颇感兴趣。
最后,是咱们持续关注的课题——无障碍功能。咱们认为,让 Flutter 应用能够服务最为普遍的受众是咱们的首要任务之一。在新版本中,咱们作了更加全面的工做,对滚动、文本框以及其余输入 widget 的无障碍功能进行了修复。GitHub 上有咱们在这个版本中完成修复的无障碍功能完整列表。咱们但愿开发者能多多测试本身应用的无障碍功能,而且随着此次版本还发布了一些推荐的最佳实践供你们参考。
而在国际化方面,咱们一直在研究一些影响三星键盘输入法的问题,这些问题影响了各类东亚语言的文本输入。 咱们很高兴地报告,咱们已经完成了这项工做,尤为是韩国开发人员应该在此版本中找到不少值得庆祝的东西。
将当前版本的 Dart DevTools 替换成新的 Flutter 版本,而后在启动 DevTools 后点击右上角的 Beaker 图标就能够 支持 Flutter了。
pub global activate devtools
复制代码
而后,在按下 Record (录制) 按钮后, Network 选项卡会显示您的 Flutter 应用的网络流量状况。若是您想在应用启动时就当即开始监测网络流量,能够在您的 main() 方法中加入以下代码。
void main() {
// enable network traffic logging
HttpClient.enableTimelineLogging = true;
runApp(MyApp());
}
复制代码
除了 Dart DevTools 的更新以外,这个版本还实验性地增长了 快速启动 选项,当您调试 Android 版 Flutter 应用时,其启动速度能够提高高达 70%。您能够经过以下命令来开启这一功能。
flutter run --fast-start -d <您的Android设备>
复制代码
这个选项会安装一个只依赖您的插件代码的通用 Android 应用,而不包含任何 Dart 代码或资源。这会让重复运行的 flutter run 命令更快地启动,由于修改 Dart 代码或资源并不须要从新构建 APK。和一般的启动选项不一样,快速启动选项将您的应用绑定到了一个通用的 Android "容器" 中,实际上并不会在您的设备上安装。在一些状况下,好比您使用的插件访问了后台执行的内容,快速启动选项将不起做用。若是您以为 Android 调试的启动时间漫长得让人头疼,不妨试试这个全新的选项吧。
若是您的目标平台是 Android,您会注意到,如今建立新的 Flutter 项目时只提供 AndroidX 选项。AndroidX 库提供了被称为 Android Jetpack 的高级 Android 功能。在上一个版本中,咱们再也不支持原先的 Android Support Library,转而将 AndroidX 做为全部新项目的默认选项。在 Flutter 1.17 中,flutter create 命令只有 --androidx 这一个选项。虽然现有的不使用 AndroidX 的 Flutter 应用依然能够编译,可是时候迁移至 AndroidX 了。
若是您使用 Android Studio 或 IntelliJ,您会发现 Hot Reload (热重载) 功能的容错性更强了。在本次更新以前,若是您的应用出现了任何分析错误,Hot Reload 将不会从新加载您的代码。若是分析错误并不涉及您当前正在运行的代码 (好比在单元测试中),会让人很崩溃。但经过本次更新,Hot Reload 将再也不受分析错误影响,而取决于 VM 中的编译错误。
若是您想更早地体验 Android Studio 或 IntelliJ 的 Flutter 插件中相似的改进,咱们如今也为 IntelliJ 插件提供了 dev 渠道,您能够选择加入,以更快获取到这些更新。这个 dev 渠道的目标是在公开发布新 IDE 集成功能前经过 Flutter 开发者收集反馈。若是您但愿尝鲜而且愿意向 Flutter 工具团队提供早期反馈,请即刻加入咱们的体验计划!
若是您使用的是 Visual Studio Code开发工具,咱们推荐使用新的 Dart: List Outdated Packages 命令来运行新的 pub outdedated 命令,以下所示。
和以往的版本同样,咱们会尽可能减小每个 Flutter 新版本中的重要改动,并回反复权衡利弊,确保 Flutter 可以提供直观、灵活的 API,可以在新平台上支持新的开发习惯。 Flutter 1.17 中的重要改动包括:
连接: