在Flutter中获取设备的宽度和高度

8

我需要一种可靠的方法来获取屏幕的尺寸。

我知道MediaQuery.of(context),但是当底部UI项目可见时,它会删除底部填充。


https://medium.com/@diegoveloper/flutter-widget-size-and-position-b0a9ffed9407 - diegoveloper
@diegoveloper 什么?这是关于小部件的大小。 - BenSabo
我可以这样解决: MediaQuery.of(context).devicePixelRatio * MediaQuery.of(context).size.width 但我真的认为应该有更好的解决方案… - BenSabo
尝试使用 import 'dart:ui' as ui;ui.window.physicalSize。虽然我认为这就是 mediaquery 底层使用的东西。 - rmtmckenzie
@rmtmckenzie 是的,你可能是对的。我刚刚使用了ui.window.physicalSize,但它返回相同的值。 ui.window.padding也是一样的情况。 - BenSabo
显示剩余7条评论
1个回答

8

在Android上,由于flutter忽略底部系统UI(即按钮),目前从dart中实现似乎是不可能的。

我以为这可能是一个bug,但如果你仔细看文档,它从来没有说明window.physicalSizeMediaQueryData.size是屏幕的物理尺寸,而是flutter可以渲染的尺寸。这可能是有道理的,否则每个应用程序都必须确保考虑到这一点。

所以你需要使用方法通道直接与Android通信。我已经看过了,似乎没有任何插件能够做到这一点,所以如果你感到有野心,可以将其包装成一个插件。但你需要做的是调用本地方法,然后直接在Java代码中获取物理屏幕大小。如果你这样做,最好也为iOS实现它,尽管这个问题在那里不存在(你甚至可以在flutter中直接使用if/else解决)。

幸运的是,有人已经做过这个,所以你可以将其作为示例使用:https://github.com/magnatronus/flutter-displaymetrics。假设displayMetrics给出了正确的大小。
希望能对你有所帮助,很抱歉我没有更简单的答案!

谢谢你的帮助,伙计。 不过希望很快会有更好的解决方案。 - BenSabo
可能值得在 GitHub 上向 Flutter 开发人员报告一个 bug,但我有一种强烈的感觉,他们会说这只是一个小问题,可以让某个人为它编写一个插件。 - rmtmckenzie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接