一个element 的创建从 inflateWidget 开始
1 调用 inflateWidget
1.1第一次创建 会走element 的mount newChild.mount(this, newSlot);
1.2 在 mount 方法中 除了公共逻辑,不同的子类有不同的处理逻辑,这里只说ComponentElement,因为StatefulElement 是它的子类。
1.3 ComponentElement.mount() 调用了_firstBuild() ,在_firstBuild 中调用了rebuild()。
1.4 StateFulElement 重写了_firstBuild(), 分别调用了state.initState() state. didChangeDependencies();
1.5 走rebuild() ->performRebuild(),针对不同的子类performRebuild()处理逻辑不一样,这里只看StatefulElement->ComponentElement().
在ComponentElement 的performRebuild 中会调用 build() ,不同的子类实现不一致,针对StatefulElement 就是调用 state.build() ,对于StatelessElement 就是调用 Widget.build().
至此 对于 StateFulWidget 的state 的声明周期调用如下 initState ->didChangeDependencies->build()
网友评论