Flutter 教程(一)Flutter 简介

648 阅读3分钟

Flutter

Flutter是谷歌公司推出的一套跨平台的开源用户界面(User Interface,UI)框架,同时支持Android App与iOS App开发。

目前业界有很多成熟的跨平台技术,但是这些技术几乎都存在一定的缺陷,例如:

  • 微信小程序(基于X5内核的WebView)渲染耗时过长、白屏率过高会影响转化收益,能实现的功能非常受限;
  • React Native具有性能不足、问题排除难、维护成本高等缺陷。

所以,到目前为止,开发人员依然需要准备两套代码,分别运行在Android端与iOS端,这样不仅增加了开发的成本,还要维护两端代码,耗时、耗力。而Flutter的出现,让这些开发问题有所改善。

Flutter 的优势

  • 跨平台性:Flutter 依靠Flutter引擎虚拟机在iOS和Android上运行的,而不是像 React Native 内部生成原生代码来实现的
  • 高帧率的流畅UI:Flutter 直接使用 Skia 作为二维渲染引擎,可以实现高帧率的流畅UI
  • 热重载:可以帮助移动应用在无须重新启动的情况下轻松完成测试、构建UI,以及修复代码中的错误

不同方案的对比

image.png

Flutter 的架构

image.png

如上图所示,Flutter 架构分成两部分,一部分是框架,另一部分是引擎。

Flutter 框架

框架是由纯Dart语言实现的,包括UI、文本、图片和按钮等Widgets,以及Rendering(渲染)、Animation(动画)、Gestures(手势)等层。各层的作用如下:

  • Foundation层与Animation、Painting、Gestures层,这两层提供了动画、绘制以及手势操作,是谷歌公司专门提供给开发人员调用的
  • Rendering层,这一层负责构建UI树,也就是当UI树上的Element发生变更时,会重新计算变更部分的位置以及大小,并更新UI树,也就是更新界面,最终将更新的界面呈现给用户
  • Widgets层与Material、Cupertino层,其中Widgets层是Flutter提供的基础组件库。Material和Cupertino是另外两种视觉风格的组件库。

Flutter引擎

Flutter引擎是由纯C++实现的SDK,主要包括Skia、Dart和Text。Framework层中所有的UI库都会调用引擎层。各层的作用如下:

  • Skia:一个开源的二维图形库,提供了多种软/硬件平台的API,其已作为Google Chrome、Chrome OS、Android、Mozilla Firefox、Firefox OS等众多产品的图形引擎。但是因为iOS并不自带Skia,所以iOS包所占存储空间比其他操作系统的大。
  • Dart:主要包括Dart Runtime、内存垃圾回收(Garbage Collection,GC),如果是Debug模式的话,还包括JIT支持。在Release和Profile模式下,是AOT编译成了原生的ARM代码,并不存在JIT部分。
  • Text:文字排版引擎

项目结构及其作用

Flutter 项目的创建可以看这篇文章。项目创建完成后的目录结构如下图所示:

image.png

各个目录及其文件的作用如下:

  • .dart_tool:记录了一些dart工具库所在的位置和信息
  • .idea:android studio 是基于idea开发的,.idea 记录了项目的一些文件的变更记录
  • android:Android项目文件夹
  • ios:OS项目文件夹
  • lib:lib文件夹内存放我们的dart语言代码,不管是在Android平台,还是在iOS平台,这个目录下的Dart代码都可以运行
  • test:用于存放我们的测试代码
  • .gitignore:git忽略配置文件
  • .metadata:IDE 用来记录某个 Flutter 项目属性的的隐藏文件
  • pubspec.yaml:与Android项目中的build.gradle(App)文件一样,它是Flutter项目的配置文件,如配置远程pub仓库的依赖库,或者指定本地资源(图片、字体、音频、视频等)。
  • flutter_demo.iml:工程文件的本地路径配置
  • pubspec.lock:当前项目依赖所生成的文件
  • README.md:READEME文件

参考