如何在Flutter中获取状态栏高度?

41

如何获取状态栏的高度?

在此输入图片描述

4个回答

112
var height = MediaQuery.of(context).viewPadding.top;

注意: 这只会在移动设备上运行,因为其他平台没有专门的状态栏,它们会返回0.0


2
在我的手机上,返回值也是0.0。 - MetaStack
2
在Android设备上返回0.0 - omega_mi
1
@omega_mi MediaQuery.of(context).padding.top 返回什么? - iDecode
1
@iDecode,padding.top和viewPadding.top都返回0.0。 - omega_mi
@omega_mi 根据设备的不同,它将返回不同的值。例如,iPhone 14 在顶部有一个摄像头空间。viewPadding 将考虑这一点。 - Vincent Gagnon

2

MediaQuery很酷,但如果您没有访问BuildContext,则可以直接使用window.viewPadding.top,其中window来自dart:ui

import 'dart:ui';

final statusBarHeight = window.viewPadding.top;

注意:Dart文档所述,这可能包括状态栏以外的其他内容,因此在使用这些API时要小心。


1

我不知道为什么,但在某些情况下,我们会在WidgetTree的叶子节点上丢失MediaQuery数据。 尝试使用与Scaffold相同的上下文获取MediaQuery,这样应该就可以解决问题了。


-4
希望这能对你有所帮助,只需在你的应用程序中添加最新的GetX包,并在你的代码中导入以下库。
import 'package:get/get.dart';

状态栏高度

要获取状态栏高度,请使用以下代码:

Get.statusBarHeight;

底部栏高度

要获取底部栏的高度,请使用以下代码:

Get.bottomBarHeight;

屏幕高度

要获取屏幕高度,请使用以下代码:

Get.height;

屏幕宽度

要获取屏幕宽度,请使用以下代码:

Get.width;

此外,您可以使用 SafeArea() 小部件来忽略覆盖层。只需将该小部件包装在您的小部件周围即可使用。


1
我注意到 Get.statusBarHeight 不会返回与 MediaQuery.of(context).viewPadding.top 相同的值。相反,它返回状态栏高度 + AppBar 高度的计算结果(顺便说一下,有几个像素的偏差)。 - Benjamin
4
我不建议仅仅为了获取状态栏高度而添加像GetX这样的完整框架。 - SEG.Veenstra
这只是针对那些在代码中使用getx的人,对于其他人,我在我的回答中提到了您也可以使用safearea和mediaquery。 - Asad Malik

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