从widgetdsbinding的drawFrame()开始向上追溯
备注:多读多理解drawFrame方法上面的备注,非常重要
从备注大概获得几个重要信息:
1:drawFrame被handleDrawFrame调用
2:SchedulerBinding. handleDrawFrame()
有备注可知,这个方法是在handleBeginFrame之后立马调用
SetState路线:
setState()à_element!.markNeedsBuild(); à owner!.scheduleBuildFor(this);à
_dirtyElements.add(element); 然后监听vsync垂直时钟信号,刷新页面
安卓原生项flutter engine发送vsync信号,flutter最开始接受的地方是
首先是SchedulerBinding# ensureFrameCallbacksRegistered方法,然后是SchedulerBinding# _handleDrawFrame à SchedulerBinding#handleDrawFrame àwidgetsBinding#drawFrame (里面调用buildOwner!.buildScope(rootElement!);) à element.rebuild();此处的element是根element à调用element. Element à 调用element的 performRebuild();此处就要跳到具体哪个组件里面的实现类,此处以component# performRebuild() à Element#updateChild(_child, built, slot);开始遍历整个树