我正在学习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,索引向上移动并且在某个时刻,新单词被添加。它如何检测何时添加以及何时停止计算索引?如果有人可以简单地向我解释,我会很感激!谢谢!
答案 0 :(得分:2)
首先,itemBuilder
的{{1}}被称为懒惰。这意味着ListView
仅请求它所需的小部件。
因此,当您向下滚动时,请求的索引会增加。
然后,实例化ListView
的窗口小部件拥有_suggestions
。这是一个建议清单。
问题是,当ListView
尝试访问_suggestions
内部不可用的索引时,该代码会检测它,然后在返回之前向_suggestions
插入另外10条建议。
这段代码有效;如果您想要无限滚动行为,请不要使用此逻辑。这只能起作用,因为它显示模拟数据。但它不适用于来自服务器的数据。
更多生产就绪代码是将listview传递给ScrollController
。然后听滚动控制器知道我们何时到达当前内容的结尾。