Flutter ListView.builder 创建无限滚动。如何设置在内容结束时停止?

问题描述 投票:0回答:3

我正在使用 ListView.buildler 将 Widget 分层,形成垂直滚动。我对这种方法的唯一问题是当滚动到达我的内容的末尾时。它会自动回到顶部。目前我有这个:

    new ListView.builder(
    scrollDirection: Axis.vertical,
    key: new Key(randomString(20)),
    reverse: false,
    primary: true,
    itemBuilder: (BuildContext context, int index) {
        return new Column(
        children: <Widget>[
            new Padding(
            padding: _bookPadding,
            child: new Container(
                width: 106.0,
                height: 162.0,
                child: new FadeInImage(
                    placeholder: new AssetImage('assets/loading.gif'),
                    image: this.book.cover)
            ),
            ),
            const Divider(),
            new Padding(
                padding: _bookPadding,
                child: new Text(
                    this.book.bookName,
                    style: getTextStyle())),
            const Divider(),
            new Padding(
            padding: _bookPadding,
            child: new Text(
                'By ' + this.book.author,
                style: getTextStyle(), ),
            ),
           ....

是否可以将ListView.builder设置为到达末尾时不换行?

listview flutter builder
3个回答
7
投票

这最终变得非常简单。不知道我是如何从文档中错过它的,我需要添加的只是一个项目计数=非空。就我而言,由于我在列表视图构建器内的单个列小部件中构建所有内容,因此我的构建器如下所示:

new ListView.builder(
    scrollDirection: Axis.vertical,
    key: new Key(randomString(20)),
    primary: true,
    itemCount: 1,
    itemBuilder: (BuildContext context, int index) {
        return new Column(
        children: <Widget>[ .....

我确实想知道这个实现是否是一个糟糕的模式。当 Column 的每个子级变得可见时,ListView.Builder 是否仍会渲染 Component Column 的每个嵌套子级?

来自文档:“创建按需创建的可滚动、线性的小部件数组。 此构造函数适用于具有大量(或无限)子级的列表视图,因为仅针对那些实际可见的子级调用该构建器。”


4
投票

您可以跳过很多代码。有时 itemBuilder 非常好,特别是当您有很多小部件并且可以通过索引轻松识别您的项目时,但您也可以直接使用子项。 ListView 文档中的示例:

new ListView(
  shrinkWrap: true,
  padding: const EdgeInsets.all(20.0),
  children: <Widget>[
    const Text('I\'m dedicating every day to you'),
    const Text('Domestic life was never quite my style'),
    const Text('When you smile, you knock me out, I fall apart'),
    const Text('And I thought I was so smart'),
  ],
)

0
投票

使用 ListView.builder 时,应始终记住指定

itemCount
itemBuilder

对于预期的无限滚动,

itemCount
可能是
list.length + 1
,以便在底部显示进度项,但否则计数应等于所有列表项的长度。

© www.soinside.com 2019 - 2024. All rights reserved.