Flutter MediaQuery.of(context).size.width 检查设备大小总是在 iOS 模拟器中返回相同的错误值

mat*_*ode 5 android ios flutter

我正在开发一个 Flutter 应用程序,需要在小屏幕(iPhone 5S、SE、6S、Galaxy 5S 等)上调整元素大小。

为了做到这一点,我调用double width = MediaQuery.of(context).size.width,如果该值低于750像素(iPhone 6S 大小),则元素会变小。

这在设备上效果很好,但在 iOS 模拟器中,无论它在哪个模拟设备上运行,该值总是很小(~375)。这基本上使得查看应用程序是否在模拟器上运行之后无法使用,因为它总是显示“小”版本。

有没有更好的方法来获取适用于 iOS 模拟器的设备大小?或者可能有其他方法来适应屏幕尺寸?

mat*_*ode 2

我想到了!事实证明,存在“逻辑”像素(系统在此处输出)和“设备”像素,它们是通过读出两者之间的比率来计算的。

当“像素”可以有子像素时,例如当从未有过的 iDevices 极大地增加了其实际分辨率,但像素计数没有乘以相同的因子时,就会使用此方法。

double logicalPixelWidth = MediaQuery.of(context).size.width;
double devicePixelRatio = MediaQuery.of(context).devicePixelRatio;
double devicePixelWidth = logicalPixelWidth * devicePixelRatio;
Run Code Online (Sandbox Code Playgroud)