Dart 颤振第一应用程序

Dart 颤振第一应用程序,dart,flutter,Dart,Flutter,我正在学习颤振框架,想了解一下谷歌教程中的第一个示例应用程序。也就是说,我想知道这段代码到底是如何工作的 Widget _buildSuggestions() { return new ListView.builder( padding: new EdgeInsets.all(6.0), itemBuilder: (_, int i) { if (i.isOdd) return new Divider(

我正在学习颤振框架,想了解一下谷歌教程中的第一个示例应用程序。也就是说,我想知道这段代码到底是如何工作的

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]);
        });
  }

这些词是如何产生的。比如,当我检查索引和
\u建议的长度时,它表示我已经生成了20个单词,但当我向下滑动时,索引是14。索引正在向上移动,并且在某个点上,添加了新单词。它如何检测何时添加和何时停止计算索引?如果有人能简单地向我解释一下,我将不胜感激!!谢谢

首先,
ListView
itemBuilder
被延迟调用。这意味着
ListView
只请求它需要的小部件。 因此,向下滚动时,请求的索引会增加

然后,实例化
列表视图的小部件具有
\u建议
。这是一个建议列表

问题是,当
ListView
试图访问
\u suggestions
中不可用的索引时,代码会检测到它,然后在返回它之前向
\u suggestions
插入另外10条建议


当这个代码工作时;如果您希望具有无限滚动行为,请不要使用此逻辑。这仅适用于显示模拟数据。但它不能处理来自服务器的数据


一种更适合生产的方法是通过listview。然后听scrollcontroller,知道我们何时到达当前内容的末尾

非常感谢您的解释!