让自己了解flutter一点

173 阅读2分钟

了解架构结构

flutter 框架结构如图所示:

WechatIMG213.png

从下而上看, 最低层是Engine(C++)层,Engine故名思意,引擎,说明底层是C++为引擎的SDK,其中包含Dart语言,Skia引擎,Text的文字引擎。

Skia是个2D向量图形处理函数库,包含字型、坐标转换,以及点阵图都有高效能且简洁的表现。不仅用于Google Chrome浏览器,新兴的Android开放手机平台也采用skia作为绘图处理,搭配OpenGL/ES与特定的硬件特征,强化显示的效果

引擎(Engine)是电子平台上开发程序或系统的核心组件。 利用引擎,开发者可迅速建立、铺设程序所需的功能,或利用其辅助程序的运转

在向上看, Foundation(基本原理)和Animation(动画),Painting(绘制), Gestures(手势), 自己理解叫做ui层的。这部分一般开发者是不会接触到,进行修改的。这部分内容是供Rendering层进行使用的。 那么Rendering层主要功能就是通过判断开发者使用的Widgets,然后通过算法逻辑,调用ui层,最终调用Skia, Text引擎进行绘制,将最终的界面效果,展示出来。如果在界面中涉及到更新,修改那么也是在Rdndering层,进行算法逻辑的计算,进行更新操作。当然,这部分的算法才是核心内容。

一切事物已界面的形式展示,经历的过程都是已,像素点 -> 构成界面 -> GPU刷新频率 -> 达到人眼的极限频率就是足够流畅的动画了。

核心理念

按照自己的理解,记录一下我认为的核心理念,毕竟一百个人眼里有一百个哈姆雷特。 通过架构可以了解到,核心是绘制,万物皆可绘制,当然flutter为我们提供了大量的widget组件,遇到一些独特的需求还是可以通过绘制来完成的。说远了有点,拉回来,绘制,刷新算法就是核心理念,那么flutter是如何做到的呢?那就不得不说Element了。 Element是Widget息息相关的,看架构了解到了Rendering层与Widget的大体关系,那么他们其中到底是怎么联系起来的,是通过Element。 Widget通过创建Element,Element创建renderObject来想成强大的Rendering层的体系中, 随便找一个Widget看一下,都会有这两个方法 WechatIMG214.png

renderObject是实现最终的布局和绘制,以及算法核心的内容。具体是怎么布局,绘制,计算的.又涉及到relayoutBoundary,RepaintBoundary,。页面发生变化之后,计算Rendering层节点上renderObject的变化进行更新操作。

总结

可以看出来对于开发者来说关注点在Widget层,并且可以通过CustomPaint绘制出自己的需求图形就可以了。