Flutter 是什么?
Flutter是谷歌开源的移动端跨平台UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。简单来说,Flutter是一款移动应用程序SDK,包含框架、控件和一些工具,可以用一套代码同时构建Android和iOS应用,并且性能可以达到原生应用一样的性能。
Flutter 发展历史
-
前身(2015.4.28)
Flutter 的前身是 2015 年在 Dart Developer Summit(Dart开发者峰会)上发布的 Sky , Sky 使用 Dart 开发,可以在 Android 上开发高达 120FPS 的应用。
-
第一个版本(2017.5.12)
2017年5月12号,Flutter 发布了第一个版本 v0.0.6,在 GitHub 上可以看到发布的记录:github.com/flutter/flu…
-
alpha 阶段(2017.5.17)
在 2017 Google I/O 上 Google 对外介绍了 Flutter 的存在,此后 Flutter 一直处在 alpha 阶段。
-
首个 beta 版本(2018.2.27)
2018 年 2 月 27 号的 MWC(Mobile World Congress,世界移动通信大会)上, Flutter 发布首个 beta 版本,Flutter 开始进入 beta 阶段,发布频率明显加快。
-
beta 阶段 (2018.5.8)
2018 Google I/O 大会上,Flutter 发布了 beta3。
-
首个发布预览版(2018.6.21)
2018 GMTC 大会上,Flutter 发布了首个发布预览版。
-
第二个发布预览版 (2018.9.19)
2018 年上海的 GDD(Google Developer Days)上,Flutter 发布了第二个发布预览版。
-
首个稳定版 1.0 (2018.12.4)
2018 年的 Flutter Live 上,Flutter 正式发布了 1.0 稳定版,标志着 Flutter 已经完善,完全可以投入生产环境,开始进入新的阶段。
-
第二个稳定版 1.2.1 (2019.2.26)
2019 年 2 月 26 号的 MWC 上,Flutter 发布第二个稳定版本 1.2.1。
-
第三个稳定版本 1.5.4-hotfix.2 (2019.5.7)
2019 年 5 月 7 号的 Google I/O 上,Flutter 发布了第三个稳定版本 1.5.4-hotfix.2。
截止目前最新的稳定版本是 v1.12.3+hotfix.8 (2020.2.9)
Flutter 特性
-
跨平台
Flutter 是 Google 新一代的跨平台 UI 框架,除了默认支持的 Android 和 iOS,经过扩展后还支持:
PC 端:Windows、Linux、MacOS。
WEB 端:WEB 端已经发布了技术预览版,GitHub 地址:github.com/flutter/flu…。
-
高性能
界面可以达到 60 FPS,最高支持120FPS ,渲染效率和用户体验堪比 Native。
Flutter 应用在 Release 下会编译成 Native ARM code ,使得跨平台的代码运行效率很高。
Native 和 Flutter 之间是通过 JNI 桥接的,也使得 Native 和 Flutter 之间交互的损耗很低。
-
丰富的 UI 组件
Flutter 内置众多精美的 Material Design(Android风格)和 Cupertino(iOS风格)的小部件,而且 UI 样式高度还原 Native 的样式,可以让我们直接使用,而且这些组件都很方便组合,还有丰富的动画库。
-
学习成本低
Flutter 的学习成本很低,屏蔽了底层的很多实现,可以很快的入手。这也带来一个问题,就是没有办法深入 Flutter 的底层,这也是本教程的目的,除了 Flutter 的使用,也会深入分析 Flutter 的底层实现。
-
开发效率高
Flutter 拥有丰富的 UI 部件,而且支持 Hot Reload,同时 Flutter 使用 Dart 语言开发,Dart 具备很多新的语言特性,可以使得开发速度很快。
-
和任何平台的交互都很方便
由于 Flutter 的架构设计,使得 Flutter 可以在任何平台扩展,也可以和平台很方便的交互,从而可以让 Flutter 使用平台的功能。
-
Write once,Run everywhere
只要写一份代码,就可以构建出 Android 和 iOS 两个平台的 APP,体验能达到和原生应用一致,真正做到「Write once , Run everywhere.」
Flutter 开发语言
Flutter 使用 Dart 语言开发。
2011 年 10 月,在丹麦召开的 GOTO 大会上,Google 发布了一种新的编程语言 Dart。如同 Kotlin 和 Swift 的出现,分别是为了解决 Java 和 Objective-C 在编写应用程序的一些实际问题一样,Dart 的诞生正是要解决 JavaScript 存在的、在语言本质上无法改进的缺陷。
之后在 Google 内部孵化了移动开发框架 Flutter,弯道超车进入了移动开发的领域;而在 Google 未来的操作系统 Fuchsia 中,Dart 更是被指定为官方的开发语言。也正是因为使用者不多、历史包袱少,所以在经历了这么多的故事后,Dart 可以彻底转变思路,成为专注大前端与跨平台生态的语言。
Dart是一种强类型、跨平台的客户端开发语言。具有专门为客户端优化、高生产力、快速高效、可移植(兼容ARM/x86)、易学的OO编程风格和原生支持响应式编程(Stream & Future)等优秀特性。Dart主要由Google负责开发和维护,在2011年10启动项目,2017年9月发布第一个2.0-dev版本。
Dart本身提供了三种运行方式:
- 使用Dart2js编译成JavaScript代码,运行在常规浏览器中(Dart Web)。
- 使用DartVM直接在命令行中运行Dart代码(DartVM)。
- AOT方式编译成机器码,例如Flutter App框架(Flutter)。
Flutter在筛选了20多种语言后,最终选择Dart作为开发语言主要有几个原因:
健全的类型系统,同时支持静态类型检查和运行时类型检查。
代码体积优化(Tree Shaking),编译时只保留运行时需要调用的代码(不允许反射这样的隐式引用),所以庞大的Widgets库不会造成发布体积过大。
丰富的底层库,Dart自身提供了非常多的库。
多生代无锁垃圾回收器,专门为UI框架中常见的大量Widgets对象创建和销毁优化。
跨平台,iOS和Android共用一套代码。
JIT & AOT运行模式,支持开发时的快速迭代和正式发布后最大程度发挥硬件性能。
在Dart中,有一些重要的基本概念需要了解:
- 所有变量的值都是对象,也就是类的实例。甚至数字、函数和
null
也都是对象,都继承自Object类。 - 虽然Dart是强类型语言,但是显式变量类型声明是可选的,Dart支持类型推断。如果不想使用类型推断,可以用dynamic类型。
- Dart支持泛型,
List
表示包含int类型的列表,List<dynamic style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; font-size: inherit; color: inherit; line-height: inherit;"></dynamic>
则表示包含任意类型的列表。 - Dart支持顶层(top-level)函数和类成员函数,也支持嵌套函数和本地函数。
- Dart支持顶层变量和类成员变量。
- Dart没有public、protected和private这些关键字,使用下划线“_”开头的变量或者函数,表示只在库内可见。