Flutter MediaQuery.of(context).size.width 值与实际屏幕分辨率不同

Mih*_*iha 6 size screen flutter

在我的 Flutter 应用程序中,我试图获得真实的屏幕宽度(在每个设备上自然会有所不同)。

我正在使用,MediaQuery.of(context).size.width但我注意到返回的值与实际屏幕分辨率不匹配。

例如,

  • 在模拟器 iPhone 11 Pro Max(分辨率为 2688 x 1242)上,我得到MediaQuery.of(context).size.width= 414

  • 在模拟器 Nexus XL(分辨率为 1440 x 2560)上,我得到MediaQuery.of(context).size.width= 411.42857142857144

  • 在真机 iPhone 7(分辨率为 1,334 x 750)上,我得到MediaQuery.of(context).size.width= 375

有谁知道为什么 MediaQuery 返回的值与以像素为单位的实际屏幕分辨率不同?

谢谢

Mic*_*ndz 8

根据size 属性的文档

以逻辑像素为单位的媒体大小(例如,屏幕的大小)。

逻辑像素在不同设备上的视觉尺寸大致相同。物理像素是设备上实际硬件像素的大小。每个逻辑像素的物理像素数由 devicePixelRatio 描述。

所以你会MediaQuery.of(context).size.width * MediaQuery.of(context).devicePixelRatio得到物理像素的宽度。

  • 确切地说,媒体查询和布局生成器约束都以逻辑像素返回结果 (3认同)