首页 > 解决方案 > 除非我打印它,否则不会在 .map() 中执行 setState

问题描述

因此,当我尝试不使用打印时,代码不会执行,但是当包含打印时,代码会“正常”运行,是否有另一种不使用打印的编码方式?

不工作

x.map((v) {
    setState(() {
        _userList.add(v.data['name']);
    });
});

在职的

print(x.map((v) {
    setState(() {
        _userList.add(v.data['name']);
    });
}));

标签: flutterdart

解决方案


假设这x是 a List,那么这是预期的行为。map返回一个惰性迭代。这意味着在迭代映射列表之前实际上什么都不会执行。从文档中:

此方法返回映射元素的视图。只要返回的 Iterable 没有被迭代,提供的函数 f 就不会被调用。

这就是打印时它起作用的原因- 打印函数需要遍历项目,因此调用 setState。

map方法通常用于以某种方式转换列表中的每个项目。如果您想为列表中的每个项目执行某些操作,请考虑使用以下forEach方法:

x.forEach((v) {
    setState(() {
        _userList.add(v.data['name']);
    });
});

推荐阅读