【问题标题】:Flutter MediaQuery.of(context).size.width to check device-size always returns same wrong value in the iOS SimulatorFlutter MediaQuery.of(context).size.width 检查设备大小总是在 iOS 模拟器中返回相同的错误值
【发布时间】:2019-12-24 18:35:44
【问题描述】:

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

为此,我调用了double width = MediaQuery.of(context).size.width,如果该值低于750 像素(iPhone 6S 尺寸),则元素会变得更小。

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

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

【问题讨论】:

  • 您自己的答案确实是正确的方法。请注意,仅在 iOS 模拟器中,MediaQuery 检索的宽度会随着您调整模拟器窗口本身的大小而变化。这在 Android 模拟器中不会发生。不知道这是 Flutter 团队的意图还是苹果模拟器的错误(ish)行为。我相信是后者。

标签: android ios flutter


【解决方案1】:

你可以使用

import 'dart:ui';
window.physicalSize.width; // This will return the physical pixels.

【讨论】:

    【解决方案2】:

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

    当一个“像素”可以有子像素时使用,例如从未 iDevice 大大提高其实际分辨率,但像素数没有乘以相同的因子。

    double logicalPixelWidth = MediaQuery.of(context).size.width;
    double devicePixelRatio = MediaQuery.of(context).devicePixelRatio;
    double devicePixelWidth = logicalPixelWidth * devicePixelRatio;
    

    【讨论】:

      猜你喜欢
      • 2020-04-22
      • 2020-03-30
      • 2020-04-29
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 2016-11-22
      相关资源
      最近更新 更多