Flutter - 另一个Listview内的Listview.builder

问题描述 投票:4回答:4

我希望我的屏幕可以滚动,所以我将所有内容都放在Listview中。

现在我想在里面显示另一个Listview来显示List的详细信息。当我尝试这个时会抛出一个错误 - “必须将扩展的小部件放在Flex小部件中。”

enter image description here

android android-listview flutter
4个回答
10
投票

shrinkwrap: true中添加listview.builder并删除最顶部的container或用column替换它。


6
投票

在listview.builder中添加shrinkWrap: true, physics: ScrollPhysics(),,在这种情况下listview.builder需要扩展父级。 physics: ScrollPhysics()将允许它保持其状态而不会滚动回到第一项。此外,如果您不希望用户滚动listview.builder,您可以使用physics: NeverScrollableScrollPhysics()


1
投票

当我使用两个ListView时,我遇到了这个问题。除了这个解决方法,没有什么对我有用。

在嵌套的Listview中,用ConstrainedBox覆盖它并给它一些很大的高度。并使用'shrinkWrap:true'两个ListViews。由于收缩膜将修剪额外的空间,因此额外的高度不会成为问题。

Flexible(
  child: ListView(
    children: <Widget>[
      //other Widgets here ...
      ConstrainedBox(
        constraints: BoxConstraints(maxHeight: 1000), // **THIS is the important part**
        child: ListView.builder(
          shrinkWrap: true,
          itemBuilder: (context, index) => _buildRow(index),
          itemCount: _elements.length,
        ),
      ),
    ],
  ),
),

-1
投票

我希望我的屏幕可以滚动,所以我将所有内容都放在Listview中。

我认为你应该使用带有条子的CustomScrollView

如果这是你第一次听到裂片,或者它们看起来有点可怕,我建议你阅读this excellent article wrote by Emily Fortuna

在你的情况下,我会做那样的事情:

return CustomScrollView(
  slivers: <Widget>[
    SliverToBoxAdapter(
      // Put here all widgets that are not slivers.
      child: Container(),
    ),
    // Replace your ListView.builder with this:
    SliverList(
      delegate: SliverChildBuilderDelegate(
        (BuildContext context, int index) {
          return ListTile();
        },
      ),
    ),
  ],
);
© www.soinside.com 2019 - 2024. All rights reserved.