第1章 Flutter概述

1.1 Flutter的历史

作为目前最流行的跨平台技术方案之一,Flutter正在被越来越多的开发者和组织使用。读者可以通过托管在GitHub上的Flutter项目源代码来查看最新信息,如图1-1所示。

015-01

图1-1 托管在GitHub上的Flutter项目源代码

自2017年5月第一个对外版本发布以来,Flutter已经发布了多个正式版本,并且Flutter在1.5版本中新增了对Web环境的支持,Flutter正式开启了全平台框架开发之路。

截至2020年8月,Flutter已经发布了1.20正式版,并且保持着每月更新一个版的速度。从Flutter的推广力度和开发者社区的活跃度可以发现,Flutter已经成为跨平台开发的主流技术和中坚力量。

1.1.1 Flutter特性

众所周知,使用原生方式开发的应用体验最好,但研发效率较低,开发成本相对较高;而跨平台开发虽然效率高,但为了“抹平”多端平台差异,各类解决方案暴露的组件和应用程序接口(API)较原生平台来说要少很多,因此开发体验和产品功能并不完美。

在跨平台应用的开发历史中,从早期的Web浏览器方案到后来的以React Native和Weex为代表的泛Web技术,都没能从根本上解决跨平台技术的渲染和效率问题。不过,谷歌公司推出的Flutter跨平台技术框架,似乎让跨平台技术获得了最佳解决方案。作为目前最流行的跨平台技术方案之一,Flutter的特性如下。

1. 跨平台开发

Flutter支持在macOS、Windows、Linux、Android、iOS以及谷歌公司的Fuchsia操作系统上运行。同时,Flutter可以真正做到一套代码同时运行在Android、iOS和Web平台上,避免过高的开发和维护成本,节约资源。

2. 符合不同平台的用户体验

Flutter内置的Material和Cupertino风格的组件,为开发者开发Android和iOS平台风格的应用提供了便捷。同时,Flutter提供的motion API、平滑而自然的滑动效果和平台感知,为用户带来全新体验。

3. 响应式框架

使用Flutter的响应式框架和一系列基础组件,可以轻松地完成用户界面(UI)的构建。同时,功能强大且灵活的API可以帮助开发者解决复杂的UI构建问题。

4. 跨平台渲染引擎

与Hybird App、React Native跨平台技术采用的方案不同,Flutter使用Skia作为其二维渲染引擎,因此它不需要像React Native那样在JavaScript和Native之间通信,从而减少了性能开销。

5. 支持本地访问和插件

通过Flutter提供的插件,开发者可以访问原生平台的API,如蓝牙、相机和Wi-Fi等。同时,Flutter还可以复用Java、Swift或ObjC代码,访问原生Android和iOS系统的功能。

6. 高性能

Flutter采用GPU渲染技术,所以性能较强。使用Flutter编写的应用运行画面基本可以达到60帧/秒,因此使用Flutter开发的应用几乎可以媲美原生应用的性能。

7. 使用Dart进行应用开发

Flutter使用Dart进行应用开发。与传统的JavaScript相比,Dart在即时(Just In Time,JIT)编译模式下的速度与JavaScript基本持平,但是在静态(Ahead Of Time,AOT)编译模式下运行时,Dart的性能远高于JavaScript。

同时,Flutter在应用开发阶段采用JIT编译模式,这样就避免了每次改动代码都需要重新编译的问题,极大地节省了开发时间。而基于AOT的发布包,使Flutter在发布时可以通过AOT生成高效的ARM代码,以保证应用性能。

1.1.2 Flutter版本

目前,Flutter源代码在Git上有4个分支,分别对应着Flutter的4种版本,即master、dev、beta和stable,这些版本稳定性依次提高,但新特性依次减少。

  • master:master版的代码是最新的,包含最新的功能和特性,但是master版的代码没有经过测试,可能会出现各种各样的缺陷。
  • dev:dev版是经过谷歌公司内部测试的版本,所以dev版是通过测试的最新版本。不过,dev版并不意味着不会有任何缺陷,因为dev版的测试只是最基础的测试,一旦发现有严重的阻塞性的缺陷,这个版本就会被废弃。
  • beta:beta版的更新频率通常是一个月一次,每个月初Flutter团队都会将上一个稳定的dev版选为beta版进行发布,此版本通常是经过线上运行的dev版,没有新的、严重的缺陷。
  • stable:stable版是从beta版中选出的版本,stable版的更新频率一般为一个季度一次,所以stable版的发布频率是不确定的,每个季度可能发布一个或多个版本。

总体来说,用于正式的生产环境时一定要选择stable版。