Flutter生命周期及监听状态

Flutter Widget生命周期分为3个阶段:

1.创建:

  • 构造方法:Flutter通过StatefulWidget.createState()创建State。可以通过此方法接收父Widget传递的初始UI配置数据,决定初始呈现效果。
  • initState:对象被插入视图树的时候调用,只会调用一次,可以作初始化工作。
  • didChangeDependencies:专门处理State对象依赖关系,initState方法后被Flutter调用, 对象以来发生改变也会调用(此方法会多次被调用)。
  • buid:构建视图,返回一个Widget。

2.更新:

  • setState:数据状态发生改变,调用此方法。
  • didChangeDependencies:对象依赖关系变了,会调用此方法
  • didUpdateWidget:Widget配置发生变化的时候,调用此方法。比如父widget触发重新构建的时候。

3.销毁:

  • deactivate:在组件树中移除会调动这个方法。
  • dispose:组件释放调用。该方法类似于iOS的dealloc方法,移除监听,资源释放 。

Flutter 状态监听WidgetsBinding

1.遵守WidgetsBindingObserver协议
2.initState添加观察者:WidgetsBinding.instance.addObserver(this);
3.dispose 移除观察者:WidgetsBinding.instance.removeObserver(this);
4.重写didChangeAppLifecycleState

class _LifeCycleObserverState extends State<LifeCycleObserver>
    with WidgetsBindingObserver {
  @override
  void initState() {
    WidgetsBinding.instance.addObserver(this);
    super.initState();
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);

    if (state == AppLifecycleState.resumed) {
      print("app进入前台");
    } else if (state == AppLifecycleState.inactive) {
      print("app在前台但不响应事件,比如电话,touch id等");
    } else if (state == AppLifecycleState.paused) {
      print("app进入后台");
    } else if (state == AppLifecycleState.detached) {
      print("没有宿主视图但是flutter引擎仍然有效");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容