【老孟Flutter】Flutter 中與平臺相關(guān)的生命周期

老孟導(dǎo)讀:關(guān)于生命周期的文章共有2篇锋爪,一篇(此篇)是介紹 Flutter 中Stateful 組件的生命周期青伤。

第二篇是 Flutter 中與平臺相關(guān)的生命周期,

博客地址:http://laomengit.com/blog/20201227/%E7%9B%B8%E5%85%B3%E5%B9%B3%E5%8F%B0%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.html

博客中還有更多精彩文章简烤,也歡迎加入 Flutter 交流群果覆。

此篇文章所說的生命周期與 StatefulWidget 組件的生命周期是不同的,這里平臺相關(guān)的生命周期指的是特定平臺相關(guān)操作所產(chǎn)生的生命周期夫否,比如 Android 中 App 退到后臺后的onPause等彻犁。

有人下場景,App正在播放視頻凰慈,此時回到手機桌面或者切換到其他App汞幢,那么此時視頻應(yīng)該暫停播放,F(xiàn)lutter 中使用 AppLifecycleState 實現(xiàn):

class AppLifecycle extends StatefulWidget {
  @override
  _AppLifecycleState createState() => _AppLifecycleState();
}

class _AppLifecycleState extends State<AppLifecycle>
    with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      //TODO
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('App 生命周期'),
      ),
      body: Center(
        child: Text(''),
      ),
    );
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }
}

重點是重寫 didChangeAppLifecycleState 方法微谓,AppLifecycleState 中的狀態(tài)包括:resumed森篷、inactive、paused堰酿、detached疾宏。

didChangeAppLifecycleState 方法的回調(diào)來源于系統(tǒng)的通知(notifications),正常情況下触创,App是能正常接收到這些通知坎藐,但有的情況下是無法接收到通知的,比如用戶強制關(guān)機哼绑、手機沒有電自動關(guān)機等岩馍。

下面對其狀態(tài)詳細說明:

  • resumed:應(yīng)用程序可見且響應(yīng)用戶輸入。
  • inactive:應(yīng)用程序處于非激活狀態(tài)抖韩,無法響應(yīng)用戶輸入蛀恩。在iOS上,打電話茂浮、響應(yīng)TouchID請求双谆、進入應(yīng)用程序切換器或控制中心都處于此狀態(tài)壳咕。在Android上,分屏應(yīng)用顽馋,打電話谓厘,彈出系統(tǒng)對話框或其他窗口等。
  • pause:應(yīng)用程序不可見且無法響應(yīng)用戶輸入寸谜,運行在后臺竟稳。處于此狀態(tài)時,引擎將不會調(diào)用 Window.onBeginFrameWindow.onDrawFrame熊痴。
  • detached:應(yīng)用程序仍寄存在Flutter引擎上他爸,但與平臺 View 分離。處于此狀態(tài)的時機:引擎首次加載到附加到一個平臺 View的過程中果善,或者由于執(zhí)行 Navigator pop 诊笤,view 被銷毀。

下面是關(guān)于生命周期經(jīng)常遇到的問題:

有2個頁面A和B岭埠,在B頁面點擊返回鍵返回到A盏混,didChangeAppLifecycleState 不回調(diào)

其實這個問題大部分人是想要實現(xiàn)類似于Android 中 onResume 中的功能蔚鸥,用 didChangeAppLifecycleState 是無法實現(xiàn)此功能的惜论,didChangeAppLifecycleState 是對應(yīng)于整個應(yīng)用程序的,而不是 Flutter 中 不同的路由(頁面)止喷。

從A->B馆类,在從B返回A,A重新加載數(shù)據(jù)使用如下方法:

A頁面代碼:

class A extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return RaisedButton(onPressed: ()async{
      var result = await Navigator.of(context).push(MaterialPageRoute(builder: (context){
        return B();
      }));
      //從B返回到A時弹谁,執(zhí)行下面的代碼
      //TODO 加載數(shù)據(jù)
    });
  }
}

B頁面代碼:

class B extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return RaisedButton(onPressed: (){
      Navigator.of(context).pop('返回的參數(shù)');
    });
  }
}

交流

老孟Flutter博客(330個控件用法+實戰(zhàn)入門系列文章):http://laomengit.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乾巧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子预愤,更是在濱河造成了極大的恐慌沟于,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件植康,死亡現(xiàn)場離奇詭異旷太,居然都是意外死亡,警方通過查閱死者的電腦和手機销睁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門供璧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冻记,你說我怎么就攤上這事睡毒。” “怎么了冗栗?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵演顾,是天一觀的道長供搀。 經(jīng)常有香客問我,道長钠至,這世上最難降的妖魔是什么趁曼? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮棕洋,結(jié)果婚禮上挡闰,老公的妹妹穿的比我還像新娘。我一直安慰自己掰盘,他們只是感情好摄悯,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愧捕,像睡著了一般奢驯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上次绘,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天瘪阁,我揣著相機與錄音,去河邊找鬼邮偎。 笑死管跺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的禾进。 我是一名探鬼主播豁跑,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泻云!你這毒婦竟也來了艇拍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤宠纯,失蹤者是張志新(化名)和其女友劉穎卸夕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婆瓜,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡快集,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了勃救。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碍讨。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蒙秒,靈堂內(nèi)的尸體忽然破棺而出勃黍,到底是詐尸還是另有隱情,我是刑警寧澤晕讲,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布覆获,位于F島的核電站马澈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏弄息。R本人自食惡果不足惜痊班,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摹量。 院中可真熱鬧涤伐,春花似錦、人聲如沸缨称。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽睦尽。三九已至器净,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間当凡,已是汗流浹背锭吨。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工恳邀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妻熊,地道東北人笼恰。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像欧瘪,于是被迫代替她去往敵國和親眷射。 傳聞我的和親對象是個殘疾皇子匙赞,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容