如何在 Flutter 中获得安全区域大小/填充

Don*_*tas 5 padding flutter flutter-layout

我正在使用 SafeArea Widget 并想提取不在安全区域内的底部区域的高度。正如我尝试使用的其他来源所推荐的那样,MediaQuery.of(context).padding但它总是返回EdgeInsets.zero. 有没有其他方法可以获得不在安全区域内的底部区域的大小?

编辑:

我将 SafeArea 小部件的底部属性设置为 true ( bottom: true),这总是导致EdgeInsets.zero. 设置bottom: false返回实际的 SafeArea 的底部填充值。

小智 28

为了让底部填充,使用

final bottomPadding = MediaQuery.of(context).padding.bottom;
Run Code Online (Sandbox Code Playgroud)

获得顶部填充使用

final topPadding = MediaQuery.of(context).padding.top;
Run Code Online (Sandbox Code Playgroud)

如果您想获取用作 Flutter Material 组件的 App Bar 的高度

AppBar appBar = new AppBar();
appBar.preferredSize.height;
Run Code Online (Sandbox Code Playgroud)


郑松岚*_*郑松岚 8

import 'dart:ui' as ui;

MediaQueryData.fromWindow(ui.window).size;
MediaQueryData.fromWindow(ui.window).padding;
Run Code Online (Sandbox Code Playgroud)


Vis*_*hal 6

要仅获取安全区域的高度,请尝试在小部件树中添加安全区域之前访问 MediaQuery 。这样你就会得到MediaQuery.of(context).padding一些价值而不是EdgeInsets.zero. 在小部件树中插入 SafeArea 后,填充设置为零。

SafeArea Widget 子项的文档说

子项的 MediaQuery 上的填充将进行适当调整,以将该小部件避免的任何边清零。

因此,要获取不包括所有系统层的高度的高度,请尝试 -

Widget build(BuildContext context) {
    final size = MediaQuery.of(context).size;
    final padding = MediaQuery.of(context).padding;
    final heigth = size.height - padding.top - padding.bottom;
    return SafeArea(
        ...
    );
}
Run Code Online (Sandbox Code Playgroud)