如何从ListView删除自动SafeArea?

Luk*_*tti 3 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,
      ),
    ],
  ),
),
Run Code Online (Sandbox Code Playgroud)

列表显示 在此处输入图片说明

在此处输入图片说明

Sin*_*afi 13

这显然是正确的答案:

padding: EdgeInsets.zero
Run Code Online (Sandbox Code Playgroud)

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

如果您不提供填充,它会自动使用 MediaQuery.of(context).padding 的部分内容

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

final EdgeInsets mediaQueryVerticalPadding =
        mediaQuery.padding.copyWith(left: 0.0, right: 0.0);
Run Code Online (Sandbox Code Playgroud)

这意味着如果您想保留一个部分的默认行为并更改其他值,您应该使用类似的方法。

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

ListView(
    padding: MediaQuery.of(context).padding.copyWith(
        left: 0,
        right: 0,
        bottom: 50,
    ),
    ...
),
Run Code Online (Sandbox Code Playgroud)


bof*_*mer 9

ListView文档中:

默认情况下,ListView将自动填充列表的可滚动末端,以避免MediaQuery的填充指示部分障碍。若要避免此行为,请使用零填充属性进行覆盖。

因此解决方法是:

ListView(
  padding: EdgeInsets.zero,
  ...
);
Run Code Online (Sandbox Code Playgroud)


Luk*_*tti 7

也找到了这个解决方案

MediaQuery.removePadding(
  context: context,
  removeTop: true,
  child: ListView(...),
)
Run Code Online (Sandbox Code Playgroud)