如何从MediaQuery.fromWindow迁移至MediaQuery.fromView?
如何从MediaQuery.fromWindow迁移到MediaQuery.fromView?
弃用背景
官方从v3.7.0-32.0.pre版本开始弃用MediaQuery.fromWindow,目的是为即将到来的多窗口支持做准备,推荐使用MediaQuery.fromView替代。
获取FlutterView的两种常用方式
从BuildContext获取(推荐)
在Widget树内的代码中,直接通过View.of(context)获取当前Widget所在的FlutterView实例,这是最稳妥的方式,能自动关联当前窗口:// 旧代码 MediaQueryData mediaQuery = MediaQuery.fromWindow(window); // 新代码 MediaQueryData mediaQuery = MediaQuery.fromView(View.of(context));无Context场景下获取
如果是在Widget树之外(比如初始化逻辑、全局工具类),可以通过WidgetsBinding获取当前活跃的视图:// 获取第一个视图(单窗口场景下足够) final FlutterView flutterView = WidgetsBinding.instance.platformDispatcher.views.first; MediaQueryData mediaQuery = MediaQuery.fromView(flutterView);注意:多窗口场景下,需要根据实际业务判断要使用哪个视图,避免直接取first导致错误。
内容的提问来源于stack exchange,提问作者spydon
相关产品推荐
相关产品推荐

