如何在Flutter中获得正确且相同的手机横向和纵向模式的宽高比?

问题描述 投票:0回答:1

我正在使用此代码来获取纵横比

final deviceAspectRatio = View.of(context).physicalSize.aspectRatio;

它在纵向上给出了正确的结果,但是当我改变横向上的方向并运行相同的代码时,我得到了不同的结果。我发现宽度和高度在方向改变时会翻转,所以我尝试了

final size = View.of(context).physicalSize;
final deviceAspectRatio = isPortrait ? size.width / size.height : size.height / size.width;

但它们仍然不一样。如何获得正确且相同的长宽比或两个方向的分辨率?

flutter orientation aspect-ratio mediaquery flutter-ui
1个回答
0
投票

我找到了解决方案。实际上,在横向模式下,宽度会因缺口和导航栏而发生变化。所以我们需要利用显示特征来获得差异。

double _useDeviceActualAspectRatio() {
  final isPortrait = MediaQueryViewSize.isPortraitOf(useContext());
  final mediaQuery = MediaQuery.of(useContext());
  final displayFeature = mediaQuery.displayFeatures.firstOrNull;
  final width = isPortrait || displayFeature == null ? mediaQuery.size.width : mediaQuery.size.width + (displayFeature.bounds.height);
  final height = mediaQuery.size.height;
  final deviceAspectRatio = isPortrait ? width / height : height / width;
  return deviceAspectRatio;
}
© www.soinside.com 2019 - 2024. All rights reserved.