一、是什么?
Flutter is Google’s UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase.--Google
Flutter是谷歌的用来构建漂亮的、近原生的跨平台UI工具包,能够一份代码多端运行。
主要分为三部分:Framework、Engine、Embedder(嵌入式平台),基于Framework开发App,在Engine里运行。
Flutter框架介绍
- Framework部分
这一部分最底层是Foundation,也就是与Engine引擎相关的一些方法api,上一层就是动画绘制还有手势相关,其次才是Rendering相关,然后才是我们Flutter重要Widget,可以看出动画手势绘制都会重新出发render,Widget才会重新绘制。在Widget之上有两种设计的风格分别是iOS的Cupertino与Android的Material两种风格的组件库。 - Engine部分
底下引擎部分就是Flutter与Cordova、Ionic、AppCan、Dcloud、APICloud、React Native这些框架最根本不同的地方,Flutter不是使用标准Web技术,而是借助可移植的图形加速渲染引擎、高性能的本地ARM代码,并以此实现跨设备、跨平台的高质量用户体验。
二、能干什么?
1、平台一致(双端UI和业务一致)
2、便捷开发(一份代码,双端运行)
3、亚秒级热重载(快捷方便的试验、重构UI、添加特性和修复bug)
4、性能直逼Native
三、什么原理?
1、Flutter 向 GPU 提供显示数据
Flutter to GPU
- GPU将信号同步到 UI 线程
- UI 线程用Dart来构建图层树
- 图层树在GPU 线程进行合成
- 合成后的视图数据提供给Skia 引擎
- Skia 引擎通过OpenGL 或者 Vulkan将显示内容提供给GPU
2、GPU 把展示数据显示到屏幕
GPU to 显示屏
- CPU 将计算好的显示内容提交给 GPU
- GPU 使用 VRAM 中的数据和命令,完成图像渲染
- 将渲染好的结果存入帧缓冲区 (FrameBuffer)
- 然后视频控制器将帧缓冲区的数据传递给显示器显示
四、怎么干?
五、灵魂拷问
1、怎么跨平台?
UI表达用Dart,渲染用基于C++的Dart Engine和OpenGL。
2、“hot reload”是怎么做到的?
hot reload 的原理是插桩,类似instant run,debug模式下,对每一个方法和成员进行插桩,运行时期reload就生效了,无需重新安装
注意:全局变量初始化、静态成员初始化、main方法不能热加载。
3、为什么有的时候不支持热重载?
网友评论