flutter 当shrinkwrap为真时,我如何填充ListView.builder的高度以填充可滚动视图内部的可用空间?

w41d8nur  于 2023-01-31  发布在  Flutter
关注(0)|答案(2)|浏览(130)

我有一个使用shrinkWrapListView.builder,因为如果我不使用它,就会收到错误。
this answer的结果是,ListView.builder上面会有很多空白:

我怎样才能去掉它?
我的代码:

SingleChildScrollView(
  child: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      Text(
        "Summary",
        maxLines: 1,
        overflow: TextOverflow.ellipsis,
      ),
      const SizedBox(height: 20.0),
      Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: [
          …
        ],
      ),
      ListView.builder(
        shrinkWrap: true,
        cacheExtent: 9999,
        itemCount: list.length,
        itemBuilder: (context, index) => ListTile(…),
      ),
    ],
  ),
),

如果您需要更多信息,请随时发表评论。
如何更改使用shrinkWrapListView.builder的位置?

nnsrf1az

nnsrf1az1#

我不知道“**ListView.builder上方的空格I *”或“如何更改使用shrinkWrapListView.builder的位置?”是什么意思
考虑所有情况的可能解决方案:
1.

  • 如果它在ListView之外,那是因为它被 Package 在Center中,这是显而易见的。
  • 如果您指的是ListView内的上边距,则是因为margin: EdgeInsets.all(32),这一行

1.你只需要删除Center小部件,它会改变它的位置到应用程序的开始。
额外的:你可以通过添加padding:EdgeInsets.zero来删除ListView.builder的默认padding,如果这是你所说的。

Scaffold(
          body: Container(
        decoration: BoxDecoration(
            border: Border.all(color: Colors.red), color: Colors.amber),
        child: ListView(
          padding: EdgeInsets.zero,
          shrinkWrap: true,
          children: const <Widget>[
            ListTile(title: Text('Item 1')),
            ListTile(title: Text('Item 2')),
            ListTile(title: Text('Item 3')),
          ],
        ),
      )),

注意:你不需要每次都使用shrinkWrap:true,只有当你的listView在另一个Scrollable视图中时,你才需要使用它。否则,你需要使用默认的false选项
参考docs:
收缩滚动视图的内容比扩展到最大允许大小要昂贵得多,因为内容在滚动期间可以扩展和收缩,这意味着每当滚动位置改变时都需要重新计算滚动视图的大小。

oalqel3c

oalqel3c2#

您应该使用Column,而不是ListView.builder

Column(
  children: list.map((element) => …).toList(),
),

相关问题