首頁 > 軟體

flutter監聽app進入前後臺狀態的實現

2022-04-18 13:01:19

在開發app的過程中,我們經常需要根據app的前後臺的狀態,做一些事情,那麼我們在flutter中是如何實現這一監聽的?

flutter給我們提供了WidgetsBindingObserver來進行一些狀態的判斷,但是判斷前後臺的狀態只是該API種其中一種功能,對於WidgetsBindingObserver需要注意兩點

  • 最好是先進入而且不會銷燬的頁面, 這可以判斷整個程式的前後臺狀態(例如:main。dart類中)
  • WidgetsBindingObserver需要被寫在MateialApp或其它主題包裹的地方

1. 監聽app進入前後臺狀態 範例程式碼:

//1.第一步需要混入 WidgetsBindingObserver類, 裡面的一些方法提供了程式狀態的一些監聽,我們可以重寫方法來實現我們的邏輯
class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Container(color: Colors.orange,)
    );
  }

  //實現監聽flutter中App的一些狀態, 比如 進入前後臺
  @override
  void initState() {
    super.initState();
    //2.頁面初始化的時候,新增一個狀態的監聽者
    WidgetsBinding.instance?.addObserver(this);
  }

  @override
  void dispose() {
    super.dispose();
    //3. 頁面銷燬時,移出監聽者
    WidgetsBinding.instance?.removeObserver(this);
  }

  //一些狀態改變監聽方法

  //監聽程式進入前後臺的狀態改變的方法
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    // TODO: implement didChangeAppLifecycleState
    super.didChangeAppLifecycleState(state);
    switch (state) {
    //進入應用時候不會觸發該狀態 應用程式處於可見狀態,並且可以響應使用者的輸入事件。它相當於 Android 中Activity的onResume
      case AppLifecycleState.resumed:
        print("應用進入前臺======");
        break;
    //應用狀態處於閒置狀態,並且沒有使用者的輸入事件,
    // 注意:這個狀態切換到 前後臺 會觸發,所以流程應該是先凍結視窗,然後停止UI
      case AppLifecycleState.inactive:
        print("應用處於閒置狀態,這種狀態的應用應該假設他們可能在任何時候暫停 切換到後臺會觸發======");
        break;
    //當前頁面即將退出
      case AppLifecycleState.detached:
        print("當前頁面即將退出======");
        break;
    // 應用程式處於不可見狀態
      case AppLifecycleState.paused:
        print("應用處於不可見狀態 後臺======");
        break;
    }
  } 
}

執行結果:

2.其它狀態監聽

//當前系統改變了一些存取性活動的回撥
  @override
  void didChangeAccessibilityFeatures() {
    super.didChangeAccessibilityFeatures();
  }

  //低記憶體回撥
  @override
  void didHaveMemoryPressure() {
    super.didHaveMemoryPressure();
  }

  //使用者本地設定變化時呼叫,如系統語言改變
  @override
  void didChangeLocales(List<Locale>? locales) {
    super.didChangeLocales(locales);
  }

  //應用尺寸改變回撥,例如旋轉
  @override
  void didChangeMetrics() {
    super.didChangeMetrics();
  }

  @override
  Future<bool> didPopRoute() {
    //return super.didPopRoute();
    print('YM--------didPopRoute');//頁面彈出
    return Future.value(false);//true為攔截,false不攔截
  }

  @override
  Future<bool> didPushRoute(String route) {
    //return super.didPushRoute(route);
    print('YM--------PushRoute');  //攔截push
    return Future.value(false);
  }

  //平臺主題改變時回撥
  @override
  void didChangePlatformBrightness() {

    super.didChangePlatformBrightness();
  }

到此這篇關於flutter監聽app進入前後臺狀態的實現的文章就介紹到這了,更多相關flutter監聽app內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com