ListView 不在定位的小部件中滚动

Posted

技术标签:

【中文标题】ListView 不在定位的小部件中滚动【英文标题】:ListView not scrolling in positioned Widget 【发布时间】:2020-05-13 02:55:08 【问题描述】:

我目前有一个堆栈,其中包含我的 AppBar 和我的页面内容的背景。 我在页面的中心显示了一个Container,使用Positioned 小部件定位,其中包含一个网格/列表视图。

@override
  Widget build(BuildContext context) 
    return Scaffold(
      extendBodyBehindAppBar: true,
      appBar: VehicleScreenAppBar(
        title: title,
        context: context,
      ),
      body: LayoutBuilder(
        builder: (contxt, vehicleListConstraints) 
          return Stack(
            overflow: Overflow.visible,
            children: <Widget>[
              AppBarBackDrop(constraints: vehicleListConstraints),
              Positioned(
                top: vehicleListConstraints.maxHeight * .15,
                left: (vehicleListConstraints.maxWidth - vehicleListConstraints.maxWidth * .9) / 2,
                child: Container(
                  color: Colors.red,
                  height: vehicleListConstraints.maxHeight * .6,
                  width: vehicleListConstraints.maxWidth * .9,
                  child: ListView.builder(
                    itemCount: 20,
                    itemBuilder: (context, i) 
                      return Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Container(
                          height: 50,
                          color: Colors.blue,
                          child: Text('text'),
                        ),
                      );
                    ,
                  ),
                ),
              )
            ],
          );
        ,
      ),
    );
  

我遇到的问题是当我有Positioned 小部件并且我明确命名了任何但不是所有的构造函数时,网格/列表视图不滚动,即top:bottom:、@987654330 @,right:。 (我通过构建器懒惰地构建网格/列表视图)。

我有一个变通/破解方法,我删除了Positioned 并将其替换为PageView。然后PageView 有一个children: &lt;Widget&gt; [ Container() ],然后我通过边距构造函数的top:left: 定位它。

这暂时可行,但不是我想在生产中实施的东西。如何在不命名所有构造函数的情况下让网格/列表视图在 Positioned 小部件内滚动?

【问题讨论】:

【参考方案1】:

这会在页面中心显示Container

Positioned(
  top: 0.0,
  left: 0.0,
  right: 0.0,
  bottom: 0.0,
  child: //your code
)

【讨论】:

【参考方案2】:

对于封装在定位小部件中的可滚动小部件,您应该为定位小部件的所有参数(left、right、top、bottom)赋予一个值,然后它将起作用。

 Positioned(
              top: 20.0,
              left: 20.0,
              right:0.0,
               bottom:0.0

              child: SizedBox(
              //what ever code is)),
                )
                  )

【讨论】:

以上是关于ListView 不在定位的小部件中滚动的主要内容,如果未能解决你的问题,请参考以下文章

Listview滚动到具有可变高度的小部件

行中忽略的小部件对齐

Flutter ListView 与不同的小部件和列表项

Google Play 报亭中使用的小部件?

我的 ListView 构建器的 ListTile 小部件不可滚动并且显示渲染问题

在没有 ListView 等的情况下刷新 Flutter 中的小部件或页面