flutter之AppLifecycleReactor

2020-07-20  本文已影响0人  wwq2020

监听生命周期和系统的一些信息

class AppLifecycleReactor extends StatefulWidget {
  const AppLifecycleReactor({ Key key }) : super(key: key);

  @override
  _AppLifecycleReactorState createState() => _AppLifecycleReactorState();
}

class _AppLifecycleReactorState extends State<AppLifecycleReactor> with WidgetsBindingObserver {
  const AppLifecycleReactor({ Key key }) : super(key: key);

  @override
  _AppLifecycleReactorState createState() => _AppLifecycleReactorState();
}

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

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

  AppLifecycleState _notification;

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    switch (state) {
      case AppLifecycleState.detached:
      // 应用任然托管在flutter引擎上,但是不可见.
      // 当应用处于这个状态时,引擎没有视图的运行.要不就是当引擎第一次初始化时处于attach视        图中,要不就是由于导航弹出导致的视图销毁后
        break;
      case  AppLifecycleState.inactive:
       // 应用在一个不活跃的状态,不会收到用户的输入
      // 在ios上,这个状态相当于应用或者flutter托管的视图在前台不活跃状态运行.当有电话进来时候应用转到这个状态等
      // 在安卓上,这个状态相当于应用或者flutter托管的视图在前台不活跃状态运行.另外一个activity获得焦点时,应用转到这个状态.比如分屏,电话等
      //   在这状态的应用应该假设他们是可能被paused的.
       break;
      case AppLifecycleState.paused:
        //应用当前对于用户不可见,不会响应用户输入,运行在后台.

        break;
      case AppLifecycleState.resumed:
        // 应用可见,响应用户输入
        break;
      default:
    }
  }

  // 访问功能有变化
  @override
  void didChangeAccessibilityFeatures() {
      
  }
 

  // 语言变化
  @override
  void didChangeLocales(List<Locale> locale) {
    
  }

  // 尺寸变化
  @override
  void didChangeMetrics() {
  //通过 WidgetsBinding.instance.window.physicalSize可获取
  }

  // 亮度变化
  @override
  void didChangePlatformBrightness() {

  }

 ///文字比例系数变化
  @override
  void didChangeTextScaleFactor() {
      // 通过WidgetsBinding.instance.window.textScaleFactor可获取
  }

  // 内存过低
@override
  void didHaveMemoryPressure() {

  }

  // 路由弹出时
@override
  void didPopRoute() {

  }

  // 路由添加时
@override
  void didPushRoute() {

  }

  @override
  Widget build(BuildContext context) {
    return Text("test");
  }
}
上一篇下一篇

猜你喜欢

热点阅读