Flutter 颤振:ListView顶部的意外空间

Flutter 颤振:ListView顶部的意外空间,flutter,listview,Flutter,Listview,我有以下源代码: @override Widget build(BuildContext context) { return Scaffold( body: CustomScrollView( controller: scrollController, slivers: <Widget>[ SliverList( delegate: SliverChildBuilderDelegate(

我有以下源代码:

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: CustomScrollView(
      controller: scrollController,
      slivers: <Widget>[
        SliverList(
          delegate: SliverChildBuilderDelegate(
            (context, cardIndex) {
              return Container(
                color: Colors.white,
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Text(
                      'Main Course',
                      style: kRestaurantMenuTypeStyle,
                    ),
                    ListView.builder(
                      itemCount: menuCards[cardIndex].menuItems.length,
                      shrinkWrap: true,
                      physics: NeverScrollableScrollPhysics(),
                      scrollDirection: Axis.vertical,
                      itemBuilder: (context, itemIndex) {
                        return RestaurantMenuItem(
                          menuItem: menuCards[cardIndex].menuItems[itemIndex],
                        );
                      },
                    ),
                  ],
                ),
              );
            },
            childCount: menuCards.length,
          ),
        ),
      ],
    ),
  );
}
@覆盖
小部件构建(构建上下文){
返回脚手架(
正文:自定义滚动视图(
控制器:滚动控制器,
条子:[
银表(
代表:SliverChildBuilderDelegate(
(上下文,cardIndex){
返回容器(
颜色:颜色,白色,
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
“主菜”,
样式:kRestaurantMenuTypeStyle,
),
ListView.builder(
itemCount:menuCards[cardIndex].menuItems.length,
收缩膜:对,
物理学:NeverscrollableScroll物理学(),
滚动方向:轴垂直,
itemBuilder:(上下文,itemIndex){
退货餐厅菜单项(
menuItem:menuCards[cardIndex]。menuItems[itemIndex],
);
},
),
],
),
);
},
childCount:menuCards.length,
),
),
],
),
);
}
不幸的是,
ListView.builder()
会自动在顶部创建这个额外的空间。如下图所示。这是“主菜”和“Bicol Express”文本之间的大空白


我不明白为什么
ListView
会这样做。如何删除空格?

我通过在列表视图中添加一个
填充来解决此问题,如下所示:

ListView.builder(
  padding: EdgeInsets.only(top: 0.0),
  ...
),

我不明白为什么这个解决方案有效。如果有人能解释这个错误,我可以接受他们的答案。

查看您的屏幕截图,
列表视图
会滚动到屏幕顶部,默认情况下,
列表视图
会添加一个填充以避免阻碍系统UI。因此,零填充将删除额外的空间

默认情况下,ListView将自动填充列表的可滚动列表 避免MediaQuery指示的部分障碍物的四肢 衬垫。若要避免此行为,请使用零填充进行替代 财产


来源:

为了避免listview的这种行为,使用[padding]覆盖padding属性

return ListView.builder(
      padding: EdgeInsets.zero,
      itemCount: data.items.length,
      itemBuilder: (context, index) {}
);