Flutter简介


1. Flutter简介

Flutter是一个由Google与社区开发的开源移动应用软件开发工具包,是一款移动应用程序SDK,包含框架、widget和工具,为开发人员提供了一种在Android和iOS上构建和部署精美移动应用程序的简单高效的方式。

目前,移动跨平台技术方案主要分为三类:

第一类:

使用原生内置浏览器加载HTML5的Hybrid技术方案,采用此类方案的主要有Cordova、ionic和微信小程序

第二类:

使用JavaScript进行开发,然后使用原生组件进行渲染的方案,采用此类方案的主要有React Native、Weex和快应用;

第三类:

是使用自带的渲染引擎和自带的原生组件来实现跨平台的方案,采用此类方案的主要是Flutter。

Flutter不是一个彻底的跨平台技术框架,如果应用开发中涉及混合开发,还需要开发者具备原生开发知识。

Android平台大多使用Java(或Kotlin),iOS平台大多使用Objective-C(或Swift)。

1.1 Flutter的特点

1)跨平台开发

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

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

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

3)响应式框架

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

4)跨平台渲染引擎

Flutter使用Skia作为其二维渲染引擎,不需要像React Native那样在JavaScript和Native之间通信,从而减少了性能开销。

5)支持本地访问和插件

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

6)高性能

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

7)使用Dart进行应用开发

在即时(Just In Time,JIT)编译模式下Dart的速度与JavaScript基本持平;在静态(Ahead Of Time,AOT)编译模式下运行时,Dart的性能远高于JavaScript。

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

1.2 Flutter版本

1)master版本

代码是最新的,包含最新的功能和特性,但是代码没有经过测试,可能会出现各种各样的缺陷。

2)dev版本

通过谷歌公司内部测试的最新版本,测试只是最基础的测试,一旦发现有严重的阻塞性的缺陷,这个版本就会被废弃。

3)beta版本

每个月初Flutter团队会将上一个稳定的dev版选为beta版进行发布,此版本通常是经过线上运行的dev版,没有新的、严重的缺陷。

4)stable版本

是从beta版本中选出的版本,一个季度更新一次或多次。

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

1.3 Flutter框架

Flutter是一个分层结构框架,每一层都建立在前一层的基础上。它主要包括三大层级,Framework(视图层)、Engine(引擎层)和Embedder(嵌入层),其中App都是基于Framework开发并运行在Engine层上的。

Framework(视图层)

是一个由Dart实现的软件开发工具包(Software Development Kit,SDK),它提供了一整套自下而上的基础库。

1)底下两层:Foundation、Animation、Painting、Gestures被合并为Dart UI层,对应Flutter中的dart:ui包,它是引擎暴露的底层UI库,提供动画、手势识别及图形绘制功能。

2)Rendering层:抽象的布局层,负责构建UI对应的树结构。当UI树上的元素发生变化时,它会计算出有变化的部分并更新UI树,最终将UI树绘制到屏幕上展示给用户,整个过程类似于React中的虚拟文档对象模型(DOM)。

3)Widgets层:Flutter在基础组件库之上,还提供了Material和Cupertino两种视觉风格的组件库。

Engine(引擎层)

是一个由C/C++实现的软件开发工具包(SDK),是Flutter的引擎,主要由Skia引擎、Dart运行时和文字排版引擎构成。Skia是开源的图形库,提供适用于多种软硬件平台的API;Dart层包含了在Dart运行时的垃圾收集、JIT编译、AOT编译;Text则负责文本渲染。

当Framework层调用dart:ui包时,最终都会走到Engine层,然后由Engine层实现真正的绘制逻辑。

Embedder(操作系统适配层/嵌入层)

Embedder层能确保各平台的兼容性。在Android和iOS平台上,Embedder层负责将上层完美地嵌入到它们中。上层只提供画布,所有内容的绘制渲染逻辑均在Flutter内部完成,这实现了Flutter App和平台的无关性。