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 适配全面屏报错 ( No MediaQuery widget ancestor found. )
Flutter - 我如何使用 MediaQuery.of(context).copyWith(textScaleFactor)