一、什么是Flutter
Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。
二、Flutter应用
除Android和iOS之外,Google的野心不仅如此,它还可以运行在Web、Windows、Linux、Ubuntu、MacOS。
三、 特性
3.1 热重载
或者说热加载,当你在项目中修改了一行代码,不用重新编译运行,模拟器直接可以刷新你修改的内容。
3.2 丰富的UI组件
支持Material和Cupertino(苹果风格的控件)
3.3 UI渲染性能
比原生都要优秀
四、跨平台解决方案比较
4.1 Web/Hybrid
Web应用就是通过应用浏览器访问的应用。Hybrid是介于原生和Web应用之间的存在,比如Android使用WebView可以通过JavaScript中介在原生和HTML之间进行数据传递,iOS则用的是WKWebView。目前有Vue、ionic、cordova。
通过该技术开发的app,UI性能差,一些特殊需求实现相对较难,唯独开发速度较快。
4.2 基于JavaScriptCore技术(体验良好)
JavaScriptCore简称JSCore,JSCore是WebKit默认内嵌的JS引擎,通过虚拟Dom树来构建UI,映射成原生UI组件,通过JSCore桥接调用原生服务。代表有ReactNative、Weex。
该技术方案UI性能一般,只是开发体验较差
4.3 基于
将某个语言编译为二进制文件,生成动态库或打包成 apk/ipa/xap 文件
五、Flutter Framework
Flutter主要由Framework
和 Engine两层组成,Framework由Dart实现(如上图),
Engine由C++实现(如下图),我们基于Framework 开发App主要运行在 Engine 上。
Meterial组件库是Android Meterial Design界面设计相关组件,
Cupertino风格组件是IOS风格组件,主要有CupertinoTabBar、CupertinoPageScaffold、CupertinoTabScaffold、CupertinoTabView等。
Widgets组要是按钮、文本、图片库等。
Rendering是DartUI的抽象层,它主要负责与引擎层的交互。
Animation是动画组件库、
Painting绘制组件库、
Gestures是手势组件库、
Foundation是基础工具库。
Skia 是开源的二维图形库,提供了适用于多种软硬件平台的通用API。其已作为Google Chrome,Chrome OS,Android, Mozilla Firefox, Firefox OS等其他众多产品的图形引擎,支持平台还包括Windows, macOS, iOS,Android,Ubuntu等。
Dart 部分主要包括:Dart Runtime,Garbage Collection(GC),如果是Debug模式的话,还包括JIT(Just In Time)支持。Release和Profile模式下,是AOT(Ahead Of Time)编译成了原生的arm代码,并不存在JIT部分。
Text 即文本渲染,其渲染层次如下:衍生自 Minikin的libtxt库(用于字体选择,分隔行);HartBuzz用于字形选择和成型;Skia作为渲染/GPU后端,在Android和Fuchsia上使用FreeType渲染,在iOS上使用CoreGraphics来渲染字体。
六、Flutter运行简单介绍
flutter先将代码编译成本地的Native Code,然后进行渲染直接展示在屏幕,并且通过Platform Channels组件调用原生系统的服务。