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

时间:2019-12-16 16:33:16

标签: flutter padding flutter-layout

我正在使用SafeArea窗口小部件,并希望提取不在安全区域内的底部区域的高度。如其他来源所推荐,我尝试使用MediaQuery.of(context).padding,但它始终返回EdgeInsets.zero。是否还有其他方法可以获取不在安全区域内的底部区域的大小?

编辑:

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

3 个答案:

答案 0 :(得分:1)

SafeArea 小部件的底部蚂蚁顶部属性购买默认设置为 true。 设置 'bottom: false' 和 'top: false' 返回实际 SafeArea 的底部和顶部填充值。

答案 1 :(得分:0)

要仅获取 Safe Area 的高度,请尝试在小部件树中添加 SafeArea 之前访问某个位置的 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(
        ...
    );
}

答案 2 :(得分:-1)

要获取底部填充,请使用

final bottomPadding = MediaQuery.of(context).padding.bottom;

要获取顶部填充,请使用

final topPadding = MediaQuery.of(context).padding.top;

如果要获取用作颤动材质组件的应用栏的高度

AppBar appBar = new AppBar();
appBar.preferredSize.height;