【问题标题】:Flutter iOS - MediaQuery.of(context).size.width does not give the width in pixelFlutter iOS - MediaQuery.of(context).size.width 没有以像素为单位给出宽度
【发布时间】:2020-04-29 00:59:24
【问题描述】:
我正在编写一个新的颤振应用程序,在某些时候,我需要获取 iOS 设备的像素数。当我使用MediaQuery.of(context).size.width 时,它返回像素数除以 3 或 2,具体取决于我使用的设备。
例如,在我的 iPhone5s 上,屏幕宽度假设为 640 像素,但媒体查询返回我 320。在我的 iPhoneXs 上,宽度假设为 1125 像素,但它返回我 375。
我们如何解决这个问题?我不确定,但我听说苹果不是在使用像素而是使用点系统?可能是相关的……
【问题讨论】:
标签:
ios
iphone
flutter
dart
ios-simulator
【解决方案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