Flutter First app

时间:2018-06-14 20:03:22

标签: dart flutter

我正在学习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,索引向上移动并且在某个时刻,新单词被添加。它如何检测何时添加以及何时停止计算索引?如果有人可以简单地向我解释,我会很感激!谢谢!

1 个答案:

答案 0 :(得分:2)

首先,itemBuilder的{​​{1}}被称为懒惰。这意味着ListView仅请求它所需的小部件。 因此,当您向下滚动时,请求的索引会增加。

然后,实例化ListView的窗口小部件拥有_suggestions。这是一个建议清单。

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

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

更多生产就绪代码是将listview传递给ScrollController。然后听滚动控制器知道我们何时到达当前内容的结尾。