Flutter - 另一个Listview内的Listview.builder

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter - 另一个Listview内的Listview.builder相关的知识,希望对你有一定的参考价值。

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

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

enter image description here

答案

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

另一答案

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

另一答案

当我使用两个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,
        ),
      ),
    ],
  ),
),
另一答案

我希望我的屏幕可以滚动,所以我将所有内容都放在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();
        },
      ),
    ),
  ],
);

以上是关于Flutter - 另一个Listview内的Listview.builder的主要内容,如果未能解决你的问题,请参考以下文章

Flutter -Listview内的复选框

堆栈内的水平Listview:水平视口被赋予无限宽度

在 Flutter 中的垂直 ScrollView 内的水平 ListView 中显示来自 Firestore 的数据

Flutter - 另一个 Listview 中的 Listview.builder

Stream 内的 Flutter ListView.Builder 不更新

Flutter:如何将值从 streamprovider / listview builder 传递给另一个类