赞
踩
key
,key
作为参数传入Widget里面,则会根据指定的名字生成key
key
,并且通过key
访问该WidgetGlobalKey
、LocalKey
、UniqueKey
或ObjectKey
进行保存Called when a dependency of this [State] object changes.
(会执行多次)类中属性值
)发生改变:执行didUpdateWidget
didChangeAppLifecycleState App生命周期发生变化AppLifecycleState.inactive
-> AppLifecycleState.paused
- @override
- void didChangeAppLifecycleState(AppLifecycleState state){
- super.didChangeAppLifecycleState(state);
- if (state == AppLifecycleState.paused) {
- // app退到后台后, 刷新状态
- }
- }
AppLifecycleState.inactive
-> AppLifecycleState.resumed
-> build
- @override
- void didChangeAppLifecycleState(AppLifecycleState state) {
- super.didChangeAppLifecycleState(state);
- // app显示后, 刷新状态
- if (state == AppLifecycleState.resumed) {
- // 刷新代码
- }
- }
StatelessWidget 的生命周期只有一个,就是 build
build 是用来创建 Widget 的,但因为 build 在每次界面刷新的时候都会调用,所以不要在 build 里写业务逻辑,可以把业务逻辑写到你的 StatelessWidget 的构造函数里。
因此生命周期很简单
依次为
有状态生命周期
一旦创建就不会发生变化,定义属性值可以变化,但不会重新渲染UI,
需要两个类去管理
- void initState() {
- super.initState();
- SchedulerBinding.instance.addPostFrameCallback((_) => {});
- }
这个方法在一帧的最后调用,并且只调用一次,使用这个方法就可以在判断渲染完成,并获取到元素的大小。
- @override
- void didChangeDependencies() {
- WidgetsBinding.instance.addPostFrameCallback(_onAfterRendering);
- super.didChangeDependencies();
- }
-
- @override
- void didUpdateWidget(T oldWidget) {
- WidgetsBinding.instance.addPostFrameCallback(_onAfterRendering);
- super.didUpdateWidget(oldWidget);
- }
-
-
- void _onAfterRendering(Duration timeStamp){
- //这里编写获取元素大小和位置的方法
- }

- //获取元素大小
- RenderObject renderObject = context.findRenderObject();
- Size size = renderObject.paintBounds.size;
- //获取元素位置:
- Vector3 vector3 = renderObject.getTransformTo(null)?.getTranslation();
- //位置(vector3.x,vector3.y)
作者:StevenHu_Sir
链接:https://www.jianshu.com/p/6c214a054f90
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。