flutter監(jiān)聽app進入前后臺狀態(tài)的實現(xiàn)
在開發(fā)app的過程中,我們經常需要根據app的前后臺的狀態(tài),做一些事情,那么我們在flutter中是如何實現(xiàn)這一監(jiān)聽的?
flutter給我們提供了WidgetsBindingObserver
來進行一些狀態(tài)的判斷,但是判斷前后臺的狀態(tài)只是該API種其中一種功能,對于WidgetsBindingObserver
需要注意兩點
- 最好是先進入而且不會銷毀的頁面, 這可以判斷整個程序的前后臺狀態(tài)(例如:
main。dart
類中) WidgetsBindingObserver
需要被寫在MateialApp
或其它主題包裹的地方
1. 監(jiān)聽app進入前后臺狀態(tài) 示例代碼:
//1.第一步需要混入 WidgetsBindingObserver類, 里面的一些方法提供了程序狀態(tài)的一些監(jiān)聽,我們可以重寫方法來實現(xiàn)我們的邏輯 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,) ); } //實現(xiàn)監(jiān)聽flutter中App的一些狀態(tài), 比如 進入前后臺 @override void initState() { super.initState(); //2.頁面初始化的時候,添加一個狀態(tài)的監(jiān)聽者 WidgetsBinding.instance?.addObserver(this); } @override void dispose() { super.dispose(); //3. 頁面銷毀時,移出監(jiān)聽者 WidgetsBinding.instance?.removeObserver(this); } //一些狀態(tài)改變監(jiān)聽方法 //監(jiān)聽程序進入前后臺的狀態(tài)改變的方法 @override void didChangeAppLifecycleState(AppLifecycleState state) { // TODO: implement didChangeAppLifecycleState super.didChangeAppLifecycleState(state); switch (state) { //進入應用時候不會觸發(fā)該狀態(tài) 應用程序處于可見狀態(tài),并且可以響應用戶的輸入事件。它相當于 Android 中Activity的onResume case AppLifecycleState.resumed: print("應用進入前臺======"); break; //應用狀態(tài)處于閑置狀態(tài),并且沒有用戶的輸入事件, // 注意:這個狀態(tài)切換到 前后臺 會觸發(fā),所以流程應該是先凍結窗口,然后停止UI case AppLifecycleState.inactive: print("應用處于閑置狀態(tài),這種狀態(tài)的應用應該假設他們可能在任何時候暫停 切換到后臺會觸發(fā)======"); break; //當前頁面即將退出 case AppLifecycleState.detached: print("當前頁面即將退出======"); break; // 應用程序處于不可見狀態(tài) case AppLifecycleState.paused: print("應用處于不可見狀態(tài) 后臺======"); break; } } }
執(zhí)行結果:
2.其它狀態(tài)監(jiān)聽
//當前系統(tǒng)改變了一些訪問性活動的回調 @override void didChangeAccessibilityFeatures() { super.didChangeAccessibilityFeatures(); } //低內存回調 @override void didHaveMemoryPressure() { super.didHaveMemoryPressure(); } //用戶本地設置變化時調用,如系統(tǒng)語言改變 @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監(jiān)聽app進入前后臺狀態(tài)的實現(xiàn)的文章就介紹到這了,更多相關flutter監(jiān)聽app內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android ListView里控件添加監(jiān)聽方法的實例詳解
這篇文章主要介紹了Android ListView里控件添加監(jiān)聽方法的實例詳解的相關資料,這里提供實例幫助大家學習理解這部分內容,需要的朋友可以參考下2017-08-08Android下錄制App操作生成Gif動態(tài)圖的全過程
這篇文章主要為大家分享了Android下錄制App操作生成Gif動態(tài)圖的全過程,感興趣的小伙伴們可以參考一下2016-01-01輕松實現(xiàn)可擴展自定義的Android滾輪時間選擇控件
這篇文章主要為大家詳細介紹了可擴展自定義的Android滾輪時間選擇控件,結合WheelView實現(xiàn)滾輪選擇日期操作,感興趣的小伙伴們可以參考一下2016-07-07Android ListView長按彈出菜單二種實現(xiàn)方式示例
這篇文章主要介紹了Android ListView長按彈出菜單的方法,大家參考實現(xiàn)2013-11-11