我正在使用此代码来获取纵横比
final deviceAspectRatio = View.of(context).physicalSize.aspectRatio;
它在纵向上给出了正确的结果,但是当我改变横向上的方向并运行相同的代码时,我得到了不同的结果。我发现宽度和高度在方向改变时会翻转,所以我尝试了
final size = View.of(context).physicalSize;
final deviceAspectRatio = isPortrait ? size.width / size.height : size.height / size.width;
但它们仍然不一样。如何获得正确且相同的长宽比或两个方向的分辨率?
我找到了解决方案。实际上,在横向模式下,宽度会因缺口和导航栏而发生变化。所以我们需要利用显示特征来获得差异。
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;
}