Flutter iOS - MediaQuery.of (context) .size.width не дает ширину в пикселях - PullRequest
0 голосов
/ 11 января 2020

Я пишу новое приложение флаттера, и в какой-то момент мне нужно получить количество пикселей на устройстве iOS. Когда я использую MediaQuery.of(context).size.width, он возвращает количество пикселей, деленное на 3 или 2. В зависимости от используемого устройства.

Например, на моем iPhone5s ширина экрана должна быть 640 пикселей, но медиа-запрос возвращает мне 320. И на моих iPhoneXs ширина должна быть 1125 пикселей, но возвращает 375.

Как мы можем решить проблему? Я не уверен, но я слышал, что яблоко не работает с пикселями, но с системой точек? Это может быть связано ...

1 Ответ

0 голосов
/ 12 января 2020

Согласно документам для 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

...