dart - 颤振第一应用
问题描述
我正在学习 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,索引正在向上移动,并且在某些时候,添加了新单词。它如何检测何时添加以及何时停止计算索引?如果有人可以向我简要解释一下,我将不胜感激!谢谢!
解决方案
首先,ListView
'sitemBuilder
被懒惰地调用。这意味着ListView
只请求它需要的小部件。因此,当您向下滚动时,请求的索引会增加。
然后,实例化的小部件ListView
拥有一个_suggestions
. 这是一个建议列表。
问题是,何时ListView
会尝试访问内部不可用的索引_suggestions
,该代码会检测到它,然后_suggestions
在返回之前插入另外 10 条建议。
虽然此代码有效;如果您想要无限滚动行为,请不要使用此逻辑。这只有效,因为它显示模拟数据。但它不适用于来自服务器的数据。
一种更适合生产的方法是通过 listview a ScrollController
. 然后听那个滚动控制器知道我们什么时候到达当前内容的结尾。
推荐阅读
- regex - 带有换行符的匹配字符串的正则表达式
- dart - Flutter:FlexibleSpaceBar折叠时更改文本
- python - 具有可变循环数的嵌套循环
- mysql - 需要多少个join才能获得不同的标签?
- docker - Heroku:如何在 gitlab CI/CD 中发布现有图像?
- python - 在 AWS lambda 函数中获取日志两次
- angular - 从 Angular 应用程序中的 HttpErrorResponse 获取错误消息
- javascript - React 16.4 允许从状态更改中调用 getDerivedStateFromProps。如何应对?
- couchbase - Couchbase 系统日志启用配置
- python - 在 skimage 中使用标签和 regionprops 时出错,