如何从ListView删除自动SafeArea?

时间:2018-08-30 21:24:22

标签: flutter

我刚刚添加了一个ListView作为Scaffold > Stack的子级,它似乎在顶部有SafeArea。列没有这个问题。我有什么办法可以删除它?

Container(
  color: Colors.grey[100],
  child: ListView(
    children: <Widget>[
      Image(
        image: snapshot.data.hero,
        height: 300.0,
        fit: BoxFit.cover,
      ),
    ],
  ),
),

ListView enter image description here

enter image description here

3 个答案:

答案 0 :(得分:5)

摘自ListView文档:

  

默认情况下,ListView将自动填充列表的可滚动内容   避免MediaQuery指示的局部阻塞   填充。若要避免此行为,请使用零填充进行覆盖   属性。

因此解决方法是:

ListView(
  padding: EdgeInsets.zero,
  ...
);

答案 1 :(得分:1)

也找到了这个解决方案

MediaQuery.removePadding(
  context: context,
  removeTop: true,
  child: ListView(...),
)

答案 2 :(得分:0)

这显然是正确的答案:

padding: EdgeInsets.zero

但是我只是想添加一些有关此问题的其他信息,这对我自己有帮助。

如果不提供填充,它将自动使用MediaQuery.of(context).padding的一部分

例如,在垂直列表视图中,默认填充为:

final EdgeInsets mediaQueryVerticalPadding =
        mediaQuery.padding.copyWith(left: 0.0, right: 0.0);

这意味着,如果要保留一个默认行为,而更改其他值,则应使用类似的内容。

例如,仅保留MediaQuery的顶部填充并编辑其余部分:

ListView(
    padding: MediaQuery.of(context).padding.copyWith(
        left: 0,
        right: 0,
        bottom: 50,
    ),
    ...
),