Flutter中MediaQueryData.fromWindow(ui.window)的替代方案咨询
替代
MediaQueryData.fromWindow(ui.window)的方案 在Widget树内获取
如果你的代码是在Widget类里(比如build方法中),直接用MediaQuery.of(context)就能拿到当前的MediaQueryData,这是官方推荐的替代方式,还能自动监听窗口变化,布局会跟着自动更新:
MediaQueryData mediaQueryData = MediaQuery.of(context); // 示例:获取屏幕尺寸 Size screenSize = mediaQueryData.size; // 示例:获取状态栏高度 double statusBarHeight = mediaQueryData.padding.top;
在非Widget树内获取
如果是在全局工具类、ViewModel这类脱离Widget树的代码里,可以通过WidgetsBinding来获取:
import 'package:flutter/widgets.dart'; MediaQueryData getMediaQueryData() { final view = WidgetsBinding.instance.platformDispatcher.views.first; return MediaQueryData.fromView(view); }
注意:多窗口应用需根据实际需求选择对应view,单窗口场景用first即可,建议添加非空判断避免异常。
内容的提问来源于stack exchange,提问作者Valerie Ackon
相关产品推荐
相关产品推荐

