Flutter 的生命周期的监听以及使用

该代码示例展示了如何在Flutter应用中使用WidgetsBindingObserver监听App的生命周期状态,特别是在AppLifecycleState.resumed时进行页面刷新,以实现在用户从设置返回时更新权限并刷新Widget开关组件。
摘要由CSDN通过智能技术生成

如题

近期开发任务中,需要实现跳转到设置中打开某项权限,然后回到app的时候刷新我们的widget开关组件,就找类似android 中 我们的onResoum 就绪状态的生命周期进行页面的刷新

下面就是代码

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with WidgetsBindingObserver{ //需要实现该方法WidgetsBindingObserver

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this); 
  }

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Material App',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Material App Bar'),
        ),
        body: Center(
          child: Container(
            child: Text('Hello World'),
          ),
        ),
      ),
    );
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
    switch (state) {
      case AppLifecycleState.inactive:
    //  应用程序处于闲置状态并且没有收到用户的输入事件。
      //注意这个状态,在切换到后台时候会触发,所以流程应该是先冻结窗口,然后停止UI
        break;
      case AppLifecycleState.paused:
//      应用程序处于不可见状态
        break;
      case AppLifecycleState.resumed:
    //    进入应用时候不会触发该状态
    //  应用程序处于可见状态,并且可以响应用户的输入事件。它相当于 Android 中Activity的onResume。
        break;
      case AppLifecycleState.detached:
        //当前页面即将退出
        break;
    }
  }

  ///当前系统改变了一些访问性活动的回调
  @override
  void didChangeAccessibilityFeatures() {
    super.didChangeAccessibilityFeatures();
  }

  ///低内存回调
  @override
  void didHaveMemoryPressure() {
    super.didHaveMemoryPressure();
  }

  ///用户本地设置变化时调用,如系统语言改变
  @override
  void didChangeLocales(List<Locale> locale) {
    super.didChangeLocales(locale);
  }

  ///应用尺寸改变时回调,例如旋转
  @override
  void didChangeMetrics() {
    super.didChangeMetrics();
    Size size = WidgetsBinding.instance.window.physicalSize;
  }

  @override
  Future<bool> didPopRoute() {//页面弹出
    return Future.value(false);//true为拦截,false不拦截
  }

  @override
  Future<bool> didPushRoute(String route) {
    return Future.value(true);
  }

  @override
  Future<bool> didPushRouteInformation(RouteInformation routeInformation) {
    return Future.value(true);
  }

  //文字大小改变时候的监听
  @override
  void didChangeTextScaleFactor() {
  }

  @override
  void didChangePlatformBrightness() {
    final window = WidgetsBinding.instance.window;
    final brightness = window.platformBrightness;
    // Brightness.light 亮色
    // Brightness.dark 暗色
    // window.onPlatformBrightnessChanged = () {
    //   // This callback gets invoked every time brightness changes
    //   final brightness = window.platformBrightness;
    // };
  }
}

仅做记录

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值