一個element 的創(chuàng)建從 inflateWidget 開始
1 調(diào)用 inflateWidget
1.1第一次創(chuàng)建 會走element 的mount newChild.mount(this, newSlot);
1.2 在 mount 方法中 除了公共邏輯,不同的子類有不同的處理邏輯,這里只說ComponentElement,因為StatefulElement 是它的子類。
1.3 ComponentElement.mount() 調(diào)用了_firstBuild() ,在_firstBuild 中調(diào)用了rebuild()。
1.4 StateFulElement 重寫了_firstBuild(), 分別調(diào)用了state.initState() state. didChangeDependencies();
1.5 走rebuild() ->performRebuild(),針對不同的子類performRebuild()處理邏輯不一樣,這里只看StatefulElement->ComponentElement().
在ComponentElement 的performRebuild 中會調(diào)用 build() ,不同的子類實現(xiàn)不一致,針對StatefulElement 就是調(diào)用 state.build() ,對于StatelessElement 就是調(diào)用 Widget.build().
至此 對于 StateFulWidget 的state 的聲明周期調(diào)用如下 initState ->didChangeDependencies->build()