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

0 阅读1分钟

写代码不需要知道底层

而面试需要底层所有原理

都是一样写出能用的代码

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

一、不会创建 RenderObjectElement(ComponentWidget)

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

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