WidgetsBinding.instance.window已弃用,相关代码如何修改?
解决WidgetsBinding.instance.window弃用问题
从Flutter 3.10版本开始,WidgetsBinding.instance.window已被标记为弃用,官方推荐使用platformDispatcher替代它来获取显示相关的系统属性。
针对你提供的代码,可以做如下调整:
方案一:使用PlatformDispatcher(适用于无Widget上下文场景)
final platformDispatcher = WidgetsBinding.instance.platformDispatcher; var pixelRatio = platformDispatcher.devicePixelRatio; var size = platformDispatcher.physicalSize / pixelRatio;
方案二:使用MediaQuery(适用于Widget树内部场景)
如果你的代码处于Widget组件中,更推荐用MediaQuery来获取这些属性,它能自动响应屏幕配置变化:
final mediaQueryData = MediaQuery.of(context); var pixelRatio = mediaQueryData.devicePixelRatio; var size = mediaQueryData.size; // 这里的size已经是逻辑尺寸,无需再除以pixelRatio
两种方案的选择依据:
- 当代码不在Widget树内(比如全局初始化工具类、后台逻辑),用
PlatformDispatcher更合适; - 当代码在Widget组件中,优先用
MediaQuery,它能和Flutter的布局系统更好地联动。
内容的提问来源于stack exchange,提问作者Anu Desai
相关产品推荐
相关产品推荐

