作者回复: 确实是写错了,稍后我修改下。正确的绘制顺序是:节点1在绘制完自身后,会再绘制节点2,然后绘制它的子节点3、4和5,最后绘制节点6。
作者回复: 感谢提醒,查了下engine源码,确实如此
作者回复: 后面会专门讲Widget的绘制流程的。
Flutter's Rendering Pipeline可以参考:https://www.youtube.com/watch?v=UUfXWzp0-DU
作者回复: 跨平台的局限就是真正的多端一致性很难完全保证,RN这种就不说了,很多组件的表现行为两边都不一样。
就连Flutter也只能做到渲染层以上的多端一致性,还是有一些原生的东西(比如Push、地图、定位、蓝牙、WebView)绕不开,需要通过在原生上写插件来搞定。不过话说回来,如果真的绕开了,那Flutter就变成操作系统了,打出来的包没个几百兆估计是搞不定的
作者回复: 深度优先和广度优先是图/树结构中的概念:一层一层由上至下/由内而外遍历的方式,叫广度优先遍历;沿着一个节点方向深入探索,走到头再回退寻找其他方向的变量方式,叫做深度优先遍历。
如果对这两个概念不熟悉的话,可以看一下数据结构中图和树部分的内容
作者回复: 赞👍
作者回复: 为了尽可能模仿的比较像原生,ListView这个控件在Android和iOS上一些拖拽和滚动行为还是有差异的。依赖这些行为的下拉刷新组件也不例外
作者回复: OpenGL是Skia的绘图引擎
作者回复: 1.比如两个Widget A和B,如果A已经完全能够把B遮盖住,B的图层就没必要绘制了。
2.归类合并可以按photoshop图层合并理解。
作者回复: webgl派生于opengl,是isa的关系;
skia是基于opengl,是use的关系。
作者回复: Flutter确实不支持动态化,不过业界已经有团队使用JSCore实现动态布局了,预计下半年会有一些较为成熟的方案出现
作者回复: 包含的
作者回复: 把地图封装成一个独立的控件,暴露接口给dart层,内嵌在flutter widget中就可以了。具体可以参考27节
作者回复: 父子之间一开始是在不同的层级,但中间会经历视图层级的合并(自动or手动),把一些能够合并的视图(比如纯叠加展示,无需交互的)都合为一层。
这里说的是针对合并后的状态描述
作者回复: OpenGL是skia的渲染后端,主要用于GPU硬件加速