flutter監(jiān)聽app進(jìn)入前后臺狀態(tài)的實現(xiàn)
在開發(fā)app的過程中,我們經(jīng)常需要根據(jù)app的前后臺的狀態(tài),做一些事情,那么我們在flutter中是如何實現(xiàn)這一監(jiān)聽的?
flutter給我們提供了WidgetsBindingObserver來進(jìn)行一些狀態(tài)的判斷,但是判斷前后臺的狀態(tài)只是該API種其中一種功能,對于WidgetsBindingObserver需要注意兩點
- 最好是先進(jìn)入而且不會銷毀的頁面, 這可以判斷整個程序的前后臺狀態(tài)(例如:
main。dart類中) WidgetsBindingObserver需要被寫在MateialApp或其它主題包裹的地方
1. 監(jiān)聽app進(jìn)入前后臺狀態(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), 比如 進(jìn)入前后臺
@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)聽程序進(jìn)入前后臺的狀態(tài)改變的方法
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
// TODO: implement didChangeAppLifecycleState
super.didChangeAppLifecycleState(state);
switch (state) {
//進(jìn)入應(yīng)用時候不會觸發(fā)該狀態(tài) 應(yīng)用程序處于可見狀態(tài),并且可以響應(yīng)用戶的輸入事件。它相當(dāng)于 Android 中Activity的onResume
case AppLifecycleState.resumed:
print("應(yīng)用進(jìn)入前臺======");
break;
//應(yīng)用狀態(tài)處于閑置狀態(tài),并且沒有用戶的輸入事件,
// 注意:這個狀態(tài)切換到 前后臺 會觸發(fā),所以流程應(yīng)該是先凍結(jié)窗口,然后停止UI
case AppLifecycleState.inactive:
print("應(yīng)用處于閑置狀態(tài),這種狀態(tài)的應(yīng)用應(yīng)該假設(shè)他們可能在任何時候暫停 切換到后臺會觸發(fā)======");
break;
//當(dāng)前頁面即將退出
case AppLifecycleState.detached:
print("當(dāng)前頁面即將退出======");
break;
// 應(yīng)用程序處于不可見狀態(tài)
case AppLifecycleState.paused:
print("應(yīng)用處于不可見狀態(tài) 后臺======");
break;
}
}
}
執(zhí)行結(jié)果:

2.其它狀態(tài)監(jiān)聽
//當(dāng)前系統(tǒng)改變了一些訪問性活動的回調(diào)
@override
void didChangeAccessibilityFeatures() {
super.didChangeAccessibilityFeatures();
}
//低內(nèi)存回調(diào)
@override
void didHaveMemoryPressure() {
super.didHaveMemoryPressure();
}
//用戶本地設(shè)置變化時調(diào)用,如系統(tǒng)語言改變
@override
void didChangeLocales(List<Locale>? locales) {
super.didChangeLocales(locales);
}
//應(yīng)用尺寸改變回調(diào),例如旋轉(zhuǎn)
@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);
}
//平臺主題改變時回調(diào)
@override
void didChangePlatformBrightness() {
super.didChangePlatformBrightness();
}
到此這篇關(guān)于flutter監(jiān)聽app進(jìn)入前后臺狀態(tài)的實現(xiàn)的文章就介紹到這了,更多相關(guān)flutter監(jiān)聽app內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Input系統(tǒng)之InputReader處理合成事件詳解
這篇文章主要為大家介紹了Input系統(tǒng)之InputReader處理合成事件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
新版Android studio導(dǎo)入微信支付和支付寶官方Demo問題解決大全
這篇文章主要為大家詳細(xì)介紹了新版Android studio導(dǎo)入微信支付和支付寶官方Demo問題的解決大全,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07
Android編程四大組件之BroadcastReceiver(廣播接收者)用法實例
這篇文章主要介紹了Android編程四大組件之BroadcastReceiver(廣播接收者)用法,結(jié)合實例形式較為詳細(xì)的分析了BroadcastReceiver的功能.定義,用法及相關(guān)使用技巧,需要的朋友可以參考下2016-01-01
android利用消息機制獲取網(wǎng)絡(luò)圖片
這篇文章主要為大家詳細(xì)介紹了android利用消息機制獲取網(wǎng)絡(luò)圖片的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
Android中自定義View的實現(xiàn)方式總結(jié)大全
這篇文章主要總結(jié)了Android中自定義View的實現(xiàn)方式的相關(guān)資料,文中介紹的非常詳細(xì),對各位Android開發(fā)者們學(xué)習(xí)或者使用自定義View具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-04-04

