Flutter生命周期及監(jiān)聽狀態(tài)

Flutter Widget生命周期分為3個階段:

1.創(chuàng)建:

  • 構造方法:Flutter通過StatefulWidget.createState()創(chuàng)建State??梢酝ㄟ^此方法接收父Widget傳遞的初始UI配置數據,決定初始呈現效果。
  • initState:對象被插入視圖樹的時候調用,只會調用一次,可以作初始化工作。
  • didChangeDependencies:專門處理State對象依賴關系,initState方法后被Flutter調用, 對象以來發(fā)生改變也會調用(此方法會多次被調用)。
  • buid:構建視圖,返回一個Widget。

2.更新:

  • setState:數據狀態(tài)發(fā)生改變,調用此方法。
  • didChangeDependencies:對象依賴關系變了,會調用此方法
  • didUpdateWidget:Widget配置發(fā)生變化的時候,調用此方法。比如父widget觸發(fā)重新構建的時候。

3.銷毀:

  • deactivate:在組件樹中移除會調動這個方法。
  • dispose:組件釋放調用。該方法類似于iOS的dealloc方法,移除監(jiān)聽,資源釋放 。

Flutter 狀態(tài)監(jiān)聽WidgetsBinding

1.遵守WidgetsBindingObserver協(xié)議
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();
  }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容