【问题标题】:Incorrect values from MediaQuery.of(context).size in FlutterFlutter 中 MediaQuery.of(context).size 的值不正确
【发布时间】:2021-06-08 15:38:26
【问题描述】:

请帮助解决我在颤振中遇到的问题。我把它们放在上下文中:

我必须创建一个响应式应用程序。我将使用 MediaQuery.of(context).size,所以在我的世界中我认为:

  • size.width > 1280px => 桌面设备
  • size.width 移动设备
  • size.width 介于 769px 和 1279px 之间 => 平板设备
  1. 我在 android studio (ADV Manager) 中创建了一个分辨率为 2560px x 1800px(桌面设备)的设备。
  1. 我编写了一个简单的指令来知道 size.width 的值:
  1. 我希望控制台打印值 2560,但打印的是 1280:

注意:我对 ADV Manager 提供的所有不同类型的设备(电视、手机、平板电脑、汽车和可穿戴操作系统)进行了大量测试,我意识到尺寸的价值。宽度总是一分为二的实际值,一些例子:

  • 如果设备的宽度为 1000,则 size.width 的值为 500。

  • 如果设备的宽度为 2560,size.width 的值为 1280。

  • 等等,总是一样的结果。

我考虑过将 size.width 值乘以 2(以获得实际值),但在 Web 浏览器中 size.witdh 值是正确的,因此问题仅出现在模拟的 android 设备上。

任何人都知道出了什么问题吗?提前致谢。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    我认为只要具有相同的纵横比就没有关系。比如你想创建一个高度为你屏幕高度1/3的Container,不管你的屏幕高度是2560还是1280,它看起来都一样,看起来完全一样。

    【讨论】:

    • Textsize 你也将根据纵横比计算?
    • Adithaz:在另一条评论中,西蒙回答了我的需要,但是,澄清一下:正确,在这一点上我完全同意你的看法。我遇到的问题是,当我尝试根据 size.width 确定要显示的容器时,让我解释一下:我有三个容器,1 个用于台式机,1 个用于平板电脑,1 个用于移动设备。我在下一条评论中继续...
    • 如果我有一台分辨率为 1920 x 1080 的平板电脑或移动设备或其他设备,我希望桌面容器即使知道它是模拟平板电脑或其他设备也会显示,但是,因为尺寸。 width 不是取值 1920 而是取值 960,它表明平板容器与桌面容器完全不同。
    【解决方案2】:

    MediaQuery.of(context).size.width * MediaQuery.of(context).devicePixelRatio 获取物理像素的宽度。

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

    【讨论】:

    • 非常感谢西蒙,这正是我需要的,再次非常感谢。
    猜你喜欢
    • 2022-09-28
    • 2020-11-10
    • 2020-04-22
    • 2022-01-20
    • 2021-12-02
    • 2021-03-23
    • 2020-01-06
    • 1970-01-01
    • 2020-12-04
    相关资源
    最近更新 更多