当前位置: 首页 > 网络应用技术

飘逸的小部件原理解释(1)

时间:2023-03-08 23:46:13 网络应用技术

  使用颤音的学生应该听到一句话:“一切都是小部件 - 所有东西都是小部件的颤动”。

  尽管不能说扑来开发中的所有代码模块都是小部件,但足以说明小部件在扑朔迷离中的重要性。本文着重于对颤音小部件原理的解释。

  什么是小部件?让我们看一下官方描述

  “ ==描述了[元素] ==的配置

  在“扑朔迷离”中,小部件的功能是“描述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