Flutter state生命周期

这篇博客探讨了Flutter应用中widget的生命周期,特别是在不同状态变化时的行为。作者通过日志记录展示了从打开app到页面跳转再到返回的过程,指出`didUpdateWidget`在父widget重建时被调用,而`deactivate`可能在渲染树调整时触发。文章引用了大牛卓原和jzoom的观点作为参考。

最近研究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

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

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

测试代码: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值