美文网首页Flutter
Flutter中的widget生命周期监听

Flutter中的widget生命周期监听

作者: xiaobug | 来源:发表于2020-08-14 16:51 被阅读0次

    在flutter项目中需要对widget的生命周期进行监听,但是sdk中的监听方法不太好用,所以抽取了一个State的基类,用来监听widget的生命周期。
    包括Flutter的生命周期监听和widget的生命周期监听,由于代码比较简单,大家有需要的直接领走,具体使用方式见注释。

    import 'package:flutter/material.dart';
    
    /// 创建日期: 2020/8/14
    /// 作者: lijianbin
    /// 描述:
    
    ///路由监听,使用时在MaterialAPP中的navigatorObservers直接赋值
    ///
    /// void main() {
    ///  runApp(MaterialApp(
    ///    navigatorObservers: [lifeObserver],
    ///    home: FirstWidget(),
    ///  ));
    ///}
    
    final RouteObserver<Route> lifeObserver = RouteObserver();
    
    ///具有Widget生命周期监听的State类,使用时和State方式一样,
    ///当widget可见时,回调onResume(),
    ///不可见时,回调onPaused(),
    ///
    ///当Apush打开B,A会调用onPaused(),B调用onResume();
    ///当Bpop返回A,A会调用onResume(),B调用onPaused();
    ///当锁屏或退入后台时,会调用onPaused();
    ///当从后台转入前台或从锁屏解锁后,会调用onResume();
    ///
    /// 使用时,直接将State替换为LifeState即可
    /// 不建议在回调用做大量的耗时操作,可以做一些定时任务的启停标记
    ///
    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();
    }
    

    相关文章

      网友评论

        本文标题:Flutter中的widget生命周期监听

        本文链接:https://www.haomeiwen.com/subject/cezgdktx.html