首页 > 解决方案 > 颤振第一应用

问题描述

我正在学习 Flutter 框架,并想从谷歌教程中询问第一个示例应用程序。也就是说,我想知道这段代码是如何工作的。

Widget _buildSuggestions() {
    return new ListView.builder(
        padding: new EdgeInsets.all(6.0),
        itemBuilder: (_, int i) {
          if (i.isOdd)
            return new Divider(
              height: 1.0,
            );

          final int index = i ~/ 2;
          print(index);
          print('sug leng ${_suggestions.length}');
          if (index >= _suggestions.length) {
            _suggestions.addAll(generateWordPairs().take(10));
          }
          return _buildRow(_suggestions[index]);
        });
  }

单词是如何真正生成的。就像当我检查索引和_suggestions它的长度时,我说我已经生成了 20 个单词,但是当我向下滑动时索引是 14,索引正在向上移动,并且在某些时候,添加了新单词。它如何检测何时添加以及何时停止计算索引?如果有人可以向我简要解释一下,我将不胜感激!谢谢!

标签: dartflutter

解决方案


首先,ListView'sitemBuilder被懒惰地调用。这意味着ListView只请求它需要的小部件。因此,当您向下滚动时,请求的索引会增加。

然后,实例化的小部件ListView拥有一个_suggestions. 这是一个建议列表。

问题是,何时ListView会尝试访问内部不可用的索引_suggestions,该代码会检测到它,然后_suggestions在返回之前插入另外 10 条建议。


虽然此代码有效;如果您想要无限滚动行为,请不要使用此逻辑。这只有效,因为它显示模拟数据。但它不适用于来自服务器的数据。

一种更适合生产的方法是通过 listview a ScrollController. 然后听那个滚动控制器知道我们什么时候到达当前内容的结尾。


推荐阅读