Flutter

Flutter 完整的生命周期(State状态管理)

2019-10-30  本文已影响0人  StevenHu_Sir

一.Widget 树

二.Context 组件上下文

三.Widget 的唯一身份标识: key

三、State完整的生命周期

1. 初始化

2. 状态变化

3. 组件移除

4. 切至后台

didChangeAppLifecycleState App生命周期发生变化
AppLifecycleState.inactive -> AppLifecycleState.paused

@override
  void didChangeAppLifecycleState(AppLifecycleState state){
    super.didChangeAppLifecycleState(state);
    if (state == AppLifecycleState.paused) {
      // app退到后台后, 刷新状态
    }
  }

5.切回前台

AppLifecycleState.inactive -> AppLifecycleState.resumed -> build

@override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
    // app显示后, 刷新状态
    if (state == AppLifecycleState.resumed) {
      // 刷新代码
    }
  }

StatelessWidget - 生命周期

StatelessWidget 的生命周期只有一个,就是 build
build 是用来创建 Widget 的,但因为 build 在每次界面刷新的时候都会调用,所以不要在 build 里写业务逻辑,可以把业务逻辑写到你的 StatelessWidget 的构造函数里

因此生命周期很简单

、StatefulWidget - 生命周期

依次为

有状态生命周期

补充-状态管理

一旦创建就不会发生变化,定义属性值可以变化,但不会重新渲染UI,

需要两个类去管理

1.WidgetsBinding.instance.addPostFrameCallback

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)
上一篇下一篇

猜你喜欢

热点阅读