網站首頁 編程語言 正文
在開發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(); }
原文鏈接:https://blog.csdn.net/yong_19930826/article/details/122437854
相關推薦
- 2022-11-17 淺析golang的依賴注入_Golang
- 2022-05-26 簡單聊一聊SQL注入及防止SQL注入_數據庫其它
- 2022-09-03 一起聊聊C++中的特殊成員函數_C 語言
- 2022-08-06 Golang并發讀取文件數據并寫入數據庫的項目實踐_Golang
- 2022-12-27 查看Python安裝路徑幾種方法小結_python
- 2023-01-02 最新C語言中getchar的使用_C 語言
- 2022-09-06 C語言常見排序算法歸并排序_C 語言
- 2022-11-16 C語言數據結構不掛科指南之線性表詳解_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支