颤动for循环未被调用

时间:2017-10-26 09:25:00

标签: dart flutter

我正在尝试使用颤振对Reddit进行粗略的克隆,以帮助我学习,但是我在初始化时遇到了我的for循环没有被调用的地方。我失败的代码部分在这里:

class RedditTable extends StatelessWidget {
  List posts;
  List containers;
  RedditTable(List posts) {
    this.posts = posts;
    this.containers = new List<Container>();

    for (var i = 0; i == posts.length; i++) {
      var post = posts[i]["data"];
      var title = post["title"];
      var container = new Container(
          margin: new EdgeInsets.symmetric(horizontal: 4.0),
          child: new Text(title)
      );
      containers.add(container);
    }
  }

没有调用for循环,因此没有填充容器列表。当我在循环之前打印posts.length时,我得到25的输出,但在循环中做同样的事情则不返回任何内容。

2 个答案:

答案 0 :(得分:7)

使用for (var i = 0; i < posts.length; i++)代替for (var i = 0; i == posts.length; i++)

由于您没有真正使用i,因此您可以使用for-in或list转换:

    for (var post in posts) {
      var title = post["data"]["title"];
      var container = new Container(
        margin: new EdgeInsets.symmetric(horizontal: 4.0),
        child: new Text(title),
      );
      containers.add(container);
    }

    // or 

    containers = posts.map((post) => new Container(
      margin: new EdgeInsets.symmetric(horizontal: 4.0),
      child: new Text(post["data"]["title"]),
    )).toList();

答案 1 :(得分:-1)

您可以使用标准的 for 循环进行迭代。例如:

var message = StringBuffer('Dart is fun');
for (var i = 0; i < 5; i++) {
  message.write('!');
}

Dart for 循环内的闭包捕获索引的值,避免了 JavaScript 中常见的陷阱。例如,考虑:

var callbacks = [];
for (var i = 0; i < 2; i++) {
  callbacks.add(() => print(i));
}
callbacks.forEach((c) => c());

输出是0,然后是1,正如预期的