Flutter中的widget生命周期監(jiān)聽

在flutter項(xiàng)目中需要對(duì)widget的生命周期進(jìn)行監(jiān)聽,但是sdk中的監(jiān)聽方法不太好用,所以抽取了一個(gè)State的基類,用來監(jiān)聽widget的生命周期。
包括Flutter的生命周期監(jiān)聽和widget的生命周期監(jiān)聽,由于代碼比較簡(jiǎn)單,大家有需要的直接領(lǐng)走,具體使用方式見注釋。

import 'package:flutter/material.dart';

/// 創(chuàng)建日期: 2020/8/14
/// 作者: lijianbin
/// 描述:

///路由監(jiān)聽,使用時(shí)在MaterialAPP中的navigatorObservers直接賦值
///
/// void main() {
///  runApp(MaterialApp(
///    navigatorObservers: [lifeObserver],
///    home: FirstWidget(),
///  ));
///}

final RouteObserver<Route> lifeObserver = RouteObserver();

///具有Widget生命周期監(jiān)聽的State類,使用時(shí)和State方式一樣,
///當(dāng)widget可見時(shí),回調(diào)onResume(),
///不可見時(shí),回調(diào)onPaused(),
///
///當(dāng)Apush打開B,A會(huì)調(diào)用onPaused(),B調(diào)用onResume();
///當(dāng)Bpop返回A,A會(huì)調(diào)用onResume(),B調(diào)用onPaused();
///當(dāng)鎖屏或退入后臺(tái)時(shí),會(huì)調(diào)用onPaused();
///當(dāng)從后臺(tái)轉(zhuǎn)入前臺(tái)或從鎖屏解鎖后,會(huì)調(diào)用onResume();
///
/// 使用時(shí),直接將State替換為L(zhǎng)ifeState即可
/// 不建議在回調(diào)用做大量的耗時(shí)操作,可以做一些定時(shí)任務(wù)的啟停標(biāo)記
///
abstract class LifeState<T extends StatefulWidget> extends State<T>
    with WidgetsBindingObserver, RouteAware {
  @override
  void initState() {
    WidgetsBinding.instance.addObserver(this);
    super.initState();
  }

  @override
  void didChangeDependencies() {
    lifeObserver.subscribe(this, ModalRoute.of(context));
    super.didChangeDependencies();
  }

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

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      onResume();
    } else if (state == AppLifecycleState.paused) {
      onPaused();
    }
  }

  void didPop() {
    onPaused();
  }

  void didPopNext() {
    onResume();
  }

  void didPush() {
    onResume();
  }

  void didPushNext() {
    onPaused();
  }

  void onResume();

  void onPaused();
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容