iT邦幫忙

1

如何用 Flutter 做出「當 App 不活動時,遮蓋畫面」的功能?

我在 Google 後,查到 .dart 可以監聽 didChangeAppLifecycleState ,記下 AppLifecycleState 後,在 setState 讀到是 paused 或 inactive 時,Widget build 回傳色塊。
但是做好以後 iOS 跟 Android 狀況完全不同,也不符合需求。(即使符合,要每個 .dart 都做,似乎也不是一個好作法)
iOS 跟 Android 各自狀況是:

  • iOS 只在 App 進入背景後,當被喚醒時,閃爍一下我在 build 回傳的色塊。
  • Android 在 App 從前景進入不活動時,這個 zoom out 動畫期間,有變成我在 build 回傳的色塊,但動畫做完進到 paused 時就變回會被看到資料的畫面了。

iOS 部分最後我還是寫了原生方法,在 AppDelegate 的生命週期裡解決了。
Android 部分,我 Google 後查到的是 Android 沒有像 iOS 有整個 App 生命週期的地方可以寫。Android 這功能的作法是全部的 Activity 繼承一個 BaseActivity,然後在 BaseActivity 裡做,但是這樣在 Flutter 裡我不知道該如何實現。
不曉得有沒有人做過這樣的功能,並在雙平台運作正常?

看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2020-05-11 12:25:26 檢舉
https://dev.to/pedromassango/onresume-and-onpause-for-widgets-on-flutter-27k2
這個?
Ken Chang iT邦新手 5 級 ‧ 2020-05-11 14:16:44 檢舉
這個實現邏輯跟我用 didChangeAppLifecycleState 做的嘗試相同,但他是在 resumed 時跳出 Alert。我把他的 Alert 搬到 inactive 跟 paused,他的狀況是 App 進入背景時,什麼事都沒有發生,還是看得到 App 在背景時的畫面。在 App 回到前景時 Alert 才跳出來。 但我想要的是 App 進入不活動的時候就遮住畫面。感謝回覆~
aquila_w iT邦新手 5 級 ‧ 2020-07-01 14:34:13 檢舉
我也有用flutter寫app過 但這方面比較沒碰
問個 不活動的意思是縮小app 類似home鍵這樣嗎?
然後隨便給個遮蓋的黑色全屏Container 但是後面還是有在執行的意思嗎?
Ken Chang iT邦新手 5 級 ‧ 2020-07-06 09:41:16 檢舉
嗨!aquila_w , 我的不活動的意思是指「任何離開前景」的狀態,例如在 iPhone 是Home快速點兩下,或是 Home 點一下,這兩個狀態都算。因為 flutter 裡面要監聽離開前景狀態是 inactive ,所以我就直接打成不活動了@@"。
而隨便給個遮蓋的黑色全屏 Container 這個沒錯,是我要的功能。至於 App 在後面有沒有在執行,就是雙系統以及 App 有哪些功能,甚至是一些黑魔法,會造成 freezes 的時間不同了。所以我無法回答「後面還是有在執行」這個問題。感謝討論~

尚未有邦友回答

立即登入回答