【问题标题】:Flutter First app颤振第一应用
【发布时间】:2018-06-14 20:03:21
【问题描述】:

我正在学习 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,索引正在向上移动,并且在某些时候添加了新单词。它如何检测何时添加以及何时停止计算索引?如果有人可以向我简要解释一下,我将不胜感激!谢谢!

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

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

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

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


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

    一种更适合生产的方法是将 listview 传递给ScrollController。然后听那个滚动控制器知道我们什么时候到达当前内容的末尾。

    【讨论】:

    • 非常感谢您的解释! ?
    猜你喜欢
    • 2020-03-15
    • 2019-04-03
    • 1970-01-01
    • 2020-08-19
    • 2018-12-16
    • 1970-01-01
    • 2021-06-30
    • 2019-08-22
    • 2021-06-14
    相关资源
    最近更新 更多