不是每一个Widget都会生成一个RenderObject

104 阅读1分钟

写代码不需要知道底层

而面试需要底层所有原理

都是一样写出能用的代码

也就是远来的和尚会念经啊

一、不会创建 RenderObjectElement(ComponentWidget)

这些 Widget 只负责组合、状态管理或逻辑控制,会创建 StatelessElement 或 StatefulElement。

WidgetElement
StatelessWidgetStatelessElement
StatefulWidgetStatefulElement
MaterialAppStatelessElement
ScaffoldStatefulElement
BuilderStatelessElement
FutureBuilderStatefulElement
StreamBuilderStatefulElement
AnimatedBuilderStatefulElement
GestureDetectorStatefulElement
NavigatorStatefulElement

也就是它们不会在RenderObject树上。

二、会创建 RenderObjectElement(RenderObjectWidget)

WidgetElementRenderObject
TextLeafRenderObjectElementRenderParagraph
RichTextLeafRenderObjectElementRenderParagraph
ImageLeafRenderObjectElementRenderImage
EditableTextLeafRenderObjectElementRenderEditable
ContainerSingleChildRenderObjectElementRenderDecoratedBox(有装饰时)
PaddingSingleChildRenderObjectElementRenderPadding
CenterSingleChildRenderObjectElementRenderPositionedBox
AlignSingleChildRenderObjectElementRenderPositionedBox
SizedBoxSingleChildRenderObjectElementRenderConstrainedBox
DecoratedBoxSingleChildRenderObjectElementRenderDecoratedBox
ConstrainedBoxSingleChildRenderObjectElementRenderConstrainedBox
OpacitySingleChildRenderObjectElementRenderOpacity
TransformSingleChildRenderObjectElementRenderTransform
ClipRRectSingleChildRenderObjectElementRenderClipRRect
RowMultiChildRenderObjectElementRenderFlex
ColumnMultiChildRenderObjectElementRenderFlex
FlexMultiChildRenderObjectElementRenderFlex
StackMultiChildRenderObjectElementRenderStack
WrapMultiChildRenderObjectElementRenderWrap
ListBodyMultiChildRenderObjectElementRenderListBody

它们会在RenderObject树上

嘚不嘚

Widget即配置,并不会对应着一模一样的RenderObject。 少了很多绘制,也是优化了绘制,提高性能。在写Widget的时候,能少用会生成RenderObjectElement的widget,也就是优化代码了。性能提升一点是一点。

DONE