Flutter-另一个Listview中的Listview.builder

Ayo*_*han 8 android android-listview flutter

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

现在,我想在其中显示另一个Listview来显示列表的详细信息。当我尝试此操作时,将引发错误-“必须在Flex小部件内放置扩展的小部件。”

在此处输入图片说明

anm*_*ail 16

添加shrinkwrap: truelistview.builder与删除最顶端的container,或是更换column

  • 谢谢,这对于将 listview.builder 放置在 listView 中但不使用 Expanded...特别有帮助 (2认同)

小智 15

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


Rom*_*tel 9

我希望我的屏幕是可滚动的,所以我把所有东西都放在一个 Listview 中。

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

如果您是第一次听说裂片妖,或者它们看起来有点吓人,我建议您阅读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();
        },
      ),
    ),
  ],
);
Run Code Online (Sandbox Code Playgroud)


Buk*_*mi 7

在我的情况下,将physics: ScrollPhysics(),ListView.builder作出ListView.builder滚动。

层次结构是 ListView > StreamBuilder > RefreshIndicator > ListView.builder


Cop*_*oad 7

这实际上取决于您的布局。可能的情况可能是:

  • 使用ListView+ ListView

    如果你想给出你的第二个ListView完整高度。

    ListView(
      children: [
        // Your other widgets ...
        ListView.builder(
          shrinkWrap: true, //    <-- Set this to true
          physics: ScrollPhysics(), // <-- Also change physics
          itemBuilder: ...,
        ),
      ],
    )
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用ListView+ ListView

    如果你想限制第二个的高度ListView

    ListView(
      children: [
        // Your other widgets ...
        SizedBox( //             <-- Use SizedBox
          height: 160, 
          child: ListView.builder(
            itemBuilder: ...,
          ),
        ),
        // Your other widgets ...
      ],
    )
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用Column+ ListView

    如果您的第一个 中没有太多(或太大)的子级ListView,请将其替换为Column.

    Column(
      children: [
        // Your other widgets ...
        Expanded( //              <-- Use Expanded
          child: ListView.builder(
            itemBuilder: ...,
          ),
        ),
      ],
    )
    
    Run Code Online (Sandbox Code Playgroud)


Mon*_*sha 6

当我使用两个ListViews 时,我遇到了这个问题,一个在另一个里面。除了这个解决方法外,没有什么对我有用。

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

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,
        ),
      ),
    ],
  ),
),
Run Code Online (Sandbox Code Playgroud)