Flutter state生命周期

最近研究flutter的生命周期,当然已经有大牛早已深入探究填坑了 !

但是 还是有些疑问!例如 didUpdateWidget为什么没有调用?

其实api早已经说明白了:父widget 重新build时调用!!

/// Called whenever the widget configuration changes.
  ///
  /// If the parent widget rebuilds and request that this location in the tree
  /// update to display a new widget

具体的生命周期图解,大牛早已总结到位!

Flutter state生命周期_第1张图片

下面以日志的显示 展示生命周期的变化,

测试代码:Page1中 嵌套一个Page1Inner的widget;

打开app进入主页面Page1(初始化阶段)

I/flutter (16721): --page1:initState
I/flutter (16721): --page1:didChangeDependencies
I/flutter (16721): --page1:build
I/flutter (16721): --Page1Inner:initState
I/flutter (16721): --Page1Inner:didChangeDependencies
I/flutter (16721): --Page1Inner:build

当page1状态发生改变时

I/flutter (16721): --page1:build
I/flutter (16721): --Page1Inner:didUpdateWidget
I/flutter (16721): --Page1Inner:build

发现 调用了page1inner的didUpdateWidget方法,page1自己didUpdateWidget方法的并没有调用

跳转到第二个页面时

I/flutter (16721): ++page2:initState
I/flutter (16721): ++page2:didChangeDependencies
I/flutter (16721): ++page2:build
I/flutter (16721): --page1:deactivate
I/flutter (16721): --Page1Inner:deactivate
I/flutter (16721): --page1:build
I/flutter (16721): --Page1Inner:didUpdateWidget
I/flutter (16721): --Page1Inner:build

page2页面初始化不必说了,关键看 page1build方法调用后,page1Inner调用didUpdateWidget方法,之后才是自身build;

这说明page1Inner的父widget发生变化了 才调用了,page1Inner的didUpdateWidget方法!

从第二个页面返回时

I/flutter (16721): --page1:deactivate
I/flutter (16721): --Page1Inner:deactivate
I/flutter (16721): --page1:build
I/flutter (16721): --Page1Inner:didUpdateWidget
I/flutter (16721): --Page1Inner:build
I/flutter (16721): ++page2:deactivate
I/flutter (16721): ++page2:dispose

deactive 本意是 不再活动,为毛 page1调用后build? 来个大胆的猜测:deactive 在在渲染树移除或是可添加到渲染树时调用!!??

参考:大牛卓原

参考:大牛jzoom

你可能感兴趣的:(flutter,android)