除非我打印它,否则不执行.map()中的setState

时间:2019-07-18 03:03:57

标签: flutter dart

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

不起作用

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

工作

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

1 个答案:

答案 0 :(得分:2)

假设xList,则这是预期的行为。 map返回惰性可迭代。这意味着在迭代映射列表之前,实际上什么也不会执行。来自documentation

  

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

这就是为什么它在打印时起作用的原因-打印功能需要遍历所有项目,因此调用setState。

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

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