Flutter iOS - MediaQuery.of(context).size.width 没有以像素为单位给出宽度

Posted

技术标签:

【中文标题】Flutter iOS - MediaQuery.of(context).size.width 没有以像素为单位给出宽度【英文标题】:Flutter iOS - MediaQuery.of(context).size.width does not give the width in pixel 【发布时间】:2020-04-29 00:59:24 【问题描述】:

我正在编写一个新的颤振应用程序,在某些时候,我需要获取 ios 设备的像素数。当我使用MediaQuery.of(context).size.width 时,它返回像素数除以 3 或 2,具体取决于我使用的设备。

例如,在我的 iPhone5s 上,屏幕宽度假设为 640 像素,但媒体查询返回我 320。在我的 iPhoneXs 上,宽度假设为 1125 像素,但它返回我 375。

我们如何解决这个问题?我不确定,但我听说苹果不是在使用像素而是使用点系统?可能是相关的……

【问题讨论】:

【参考方案1】:

根据docs 对应MediaQuery.of(context).size

MediaQuery.of(context).size 返回媒体的逻辑像素大小

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

Flutter 向您显示的是您设备的逻辑像素。您可能正在寻找(或称为 640 像素和 1125 像素)是设备的物理像素

要获取设备的物理像素,您应该尝试

var devicePhysicalPixelWidth = MediaQuery.of(context).size.width * MediaQuery.of(context).devicePixelRatio

简单来说, devicePhysicalPixelWidth = logical pixel width * device pixel ratio

【讨论】:

以上是关于Flutter iOS - MediaQuery.of(context).size.width 没有以像素为单位给出宽度的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 Flutter 中的 MediaQuery 错误? [复制]

Flutter - 使用 MediaQuery 时防止重建

错误记录Flutter 使用 MediaQuery 适配全面屏报错 ( No MediaQuery widget ancestor found. )

Flutter - 我如何使用 MediaQuery.of(context).copyWith(textScaleFactor)

无法在 Flutter Web 中使用 MediaQuery

Flutter中 MediaQuery 和 build 优化你不知道的秘密