Flutter 开发实战

235课时
2.1K学过
8分

课程评价 (0)

请对课程作出评价:
0/300

学员评价

暂无精选评价
1分钟

07 MultiChildRenderObjectElement

前面的篇章我们说过 ElementBuildContext 的实现, 内部一般持有 WidgetRenderObject 并作为二者沟通的桥梁,那么 MultiChildRenderObjectElement 就是我们自定义布局时的桥梁了, 如下代码所示,MultiChildRenderObjectElement 主要实现了如下接口,其主要功能是对内部 childrenRenderObject ,实现了插入、移除、访问、更新等逻辑:

	/// 下面三个方法都是利用 ContainerRenderObjectMixin 的 insert/move/remove 去操作
	/// ContainerRenderObjectMixin<RenderObject, ContainerParentDataMixin<RenderObject> 
	void insertChildRenderObject(RenderObject child, Element slot) 
	void moveChildRenderObject(RenderObject child, dynamic slot)         
	void removeChildRenderObject(RenderObject child)
	
	/// visitChildren 是通过 Element 中的 ElementVisitor 去迭代的
	/// 一般在 RenderObject get renderObject 会调用
	void visitChildren(ElementVisitor visitor)
	
	/// 添加忽略child _forgottenChildren.add(child);
	void forgetChild(Element child) 
	
	/// 通过 inflateWidget , 把 children 中 List<Widget> 对应的 List<Element>
	void mount(Element parent, dynamic newSlot)
	
	/// 通过 updateChildren 方法去更新得到  List<Element>
	void update(MultiChildRenderObjectWidget newWidget)
	

所以 MultiChildRenderObjectElement 利用 ContainerRenderObjectMixin 最终将我们自定义的 RenderBoxWidget 关联起来。