我正在尝试使用颤振对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的输出,但在循环中做同样的事情则不返回任何内容。
答案 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,正如预期的