美文网首页
Flutter生命周期及监听状态

Flutter生命周期及监听状态

作者: Michale_Zuo | 来源:发表于2021-03-28 16:23 被阅读0次

    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();
      }
    }
    

    相关文章

      网友评论

          本文标题:Flutter生命周期及监听状态

          本文链接:https://www.haomeiwen.com/subject/bvwphltx.html