WidgetsBindingObserver -----》Widget(相当于form)

ScreenUtilInit 查看代码

  WidgetsBindingObserver 相当于 win wm_size 观察 widget变化 wnd_proc

        WidgetsBinding get binding =WidgetsFlutterBinding.ensureInitialized() 窗口建立

        WidgetsBinding.instance==binding

        WidgetsBinding.instance.addObserver(this); ===binding.addObserver(this); 建立了关联。。。。。。。。。。。。。

        MediaQueryData=MediaQueryData.fromWindow(binding.window);

        final el = context.getElementForInheritedWidgetOfExactType(); 列表中信息【】

        final mq = el?.widget as MediaQuery?;

        MediaQueryData = mq?.data;

        WidgetsBindingObserver 中的回调方法

// Accessibility 相关特性回调

        void didChangeAccessibilityFeatures() { }

// App 生命周期改变回调

        void didChangeAppLifecycleState(AppLifecycleState state) { }

// 本地化语言改变回调

        void didChangeLocales(List locale) { }

// 系统窗口相关改变回调

        void didChangeMetrics() { }

// 系统亮度改变回调

        void didChangePlatformBrightness() { }

// 文本缩放系数改变回调

        void didChangeTextScaleFactor() { }

// 内存不足警告回调

        void didHaveMemoryPressure() { }

// 页面 pop

        Future didPopRoute() => Future.value(false);

// 页面 push

        Future didPushRoute(String route) => Future.value(false);

例如生命周期变化demo

didChangeAppLifecycleState 回调方法中,有一个参数类型为 AppLifecycleState 的枚举类,这个枚举类是 Flutter 对 App 生命周期状态的封装,常用的状态包括 inactive、paused、resumed

inactive:处在不活动状态,无法处理用户响应

paused:不可见且不能响应用户的输入,但在后台继续活动中

resumed:可见的,且能响应用户的输入

class AppLifecycleReactor extends StatefulWidget {

        const AppLifecycleReactor({ Key key }) : super(key: key);

@override

        _AppLifecycleReactorState createState() => _AppLifecycleReactorState();

}

class _AppLifecycleReactorState extends State 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) {

        print("$state");

}

}

        从前台退到后台,控制台打印的 App 生命周期变化如下:

        AppLifecycleState.resumed->AppLifecycleState.inactive->AppLifecycleState.paused

        从后台切换回前台,控制台打印的 App 生命周期变化如下:

        AppLifecycleState.paused->AppLifecycleState.inactive->AppLifecycleState.resumed

        WidgetsBinding 提供了单次 Frame 绘制回调及实时 Frame 绘制回调两种机制

        单次 Frame 绘制回调:通过 addPostFrameCallback 实现。在当前 Frame 绘制完后进行回调,且只会回调一次,如果需要多次回调则需设置多次

        WidgetsBindingObserver.instance.addPostFrameCallback((){print("addPostFrameCallback 绘制回调"); // 只回调一次});实时 Frame 绘制回调:通过 addPersistentFrameCallback 实现。在每次绘制 Frame 结束后进行回调WidgetsBindingObserver.instance.addPersistentFrameCallback((){

print("addPersistentFrameCallback 绘制回调"); // 每帧都回调

});

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值