使用颤音的学生应该听到一句话:“一切都是小部件 - 所有东西都是小部件的颤动”。
尽管不能说扑来开发中的所有代码模块都是小部件,但足以说明小部件在扑朔迷离中的重要性。本文着重于对颤音小部件原理的解释。
什么是小部件?让我们看一下官方描述
“ ==描述了[元素] ==的配置
在“扑朔迷离”中,小部件的功能是“描述UI元素的配置数据”。
这句话很简单,如何理解?暂时可以简要理解,设备上的flutter的最终绘图元素都是由小部件配置的。
在Web前端开发中,我们知道浏览器页面由HTML+CSS+JS配置。其中,HTML负责配置UI结构,CSS负责配置UI样式,JS负责UI交互。
在颤音中,无论是UI结构还是UI样式,然后通过小部件完成UI交互。例如:
在颤抖中,该官员提供了多达300多个主要小部件。这么多的小部件在基本原理级别如何分类?
使用颤音的学生,最熟悉的是两个小部件:无家可归者和statefulwidget。这两个是另一个吗?
让我们看一下Flutter小部件组件的继承图。
从上图,我们知道继承小部件基类的四个子类是
前三种类型的无状态窗,statefulwidget,renderObjectWidget负责UI渲染配置,而ProxyWidget遗传继承的子类负责将数据传递到窗口基树。
如果根据功能对其进行分类,则可以将其分为两类:
NectelessWidget,statefulwidget,renderObjectWidget可以根据UI配置类型窗口小部件分为两类:
接下来,本文主要解释UI配置类型窗口小部件,UI树数据状态管理小部件 - inheritedWidget,将在下一篇文章中进行解释。
在日常业务开发中,开发人员只需要使用小部件的组合来满足99%的业务功能。因此,对于首先颤抖的学生来说,使用状态下的Widget和StateFulwidget可以满足业务发展需求。
组合小部件和自定义渲染之间有什么区别?
从前端的角度来看,我们开发了一个HTML页面,只需要使用标准DIV,SPAN和其他标签和CSS位置样式,W3C定义的颜色来设置完整的页面。
至于最终如何渲染DIV和颜色浏览器,不需要开发人员的定义,并且本地浏览器引擎实现了全部功能。开发人员基于Div+CSS,这些组件是组合的组件,这些组件等同于组合的组合。小部件。
那么什么是自定义渲染窗口小部件?前端开发人员的样式渲染以及前端开发人员的框架圆角的CSS渲染是一种自定义渲染组件,相当于和自定义渲染的小部件。
让我们首先看一下源代码抽象的定义
NectelessWidget源代码
statefulwidget
从源代码中,我们可以看到,无状态窗是一个无状态的组件,可提供组件构建函数构建。StateFulWidget是一种状态组件,它提供了状态创建函数CreateState。
接下来,查看取决于Statefulwidget类中状态类的源代码
从上面的代码可以看出,状态是状态状态,生命周期钩函数initstate,处置和其他状态变化。
根据SetState源代码的定义,SetState将触发组件渲染函数MarkneedSbuild。
从源代码比较的角度来看,Secitelesswidget的实现非常简单,甚至不是组件生命周期的钩子函数,并且StateFullwidget相对复杂。
如果使用了反应组件比率,则无状态电视等同于纯函数组件,而statefullwidget是一种组件。
并且无状态的Widget和StateFullwidget使用方案与React Pure purot功能组件和类组件使用方案相同,因此我在这里不重复它们。
statefulwidget生命周期流程图
专注于以下生命周期钩子:
让我们看一下RenderObjectWidget子类继承图。
从上图,我们可以知道RenderObjectWidget分为三类:
Flutter的本地基本布局组件是通过继承SinglechdrenderObjectWidget或MultichildRenderObjectWidget实现的。
接下来,让我们看一下源代码实现:
RenderObjectWidget
LeafrenderObjectWidget
SingleChildRenderObjectWidget
MultichildRenderObjectWidget
可以从LeafrenderObjectWidget,SingleChildRenderObjectWidget,MultichildRenderObjectWidget的源代码中可以看出,以处理RenderObjectWidget。
继承ReaderObjectWidget的自定义子类的最重要的是,抽象函数createrenderObject,updateenderObject,对应于创建和更新
采取填充本机小部件源代码以达到距离。
原始解释是通过填充小部件实现的。我相信每个人都对RenderObjectWidget实施的基本原理有一定的了解。其他RenderObjectWidget的实现基本上是相似的。本文不会一个人做。有兴趣的学生可以自己阅读“颤音源代码”。
颤动小部件原理的第一部分是第一部分基本上已经结束。下一章将解释senasitedwidget.later的实现原理,我将继续在颤动的三个树小部件树,元素树和renderObject树的深度解释中解释,以完全分析原理级别的扑朔迷离原理。有兴趣的朋友可以注意一波?
原始:https://juejin.cn/post/7101203736311595045