在 Flutter 中,我有这段代码,它对所有都返回零item2
:
for (var item2 in json.decode(item.details?["result"]))
Text(
((json.decode(item.details?["result"])).indexOf(item2) + 1).toString()
),
我的问题是为什么上面的代码输出0
,而下面的代码显示正确的索引:
for (var item in values)
Text(
(values.indexOf(item) + 1).toString()
),
更新:我的实际代码如下,所以我无法在 for 循环中真正声明一个新变量...或者可以吗?
Widget build(BuildContext context) {
return Scaffold(
body: Container(
...
for (var item in values)
Text(
(values.indexOf(item) + 1).toString()
),
for (var item2 in json.decode(item.details?["result"]))
Text(
((json.decode(item.details?["result"])).indexOf(item2) + 1).toString()
),
),
);
}
出现此问题的原因是,每次调用 json.decode 时,它都会生成新对象,而 Dart 中的 indexOf 会通过引用比较列表、映射或其他对象等复杂类型的对象,从而重新对小部件树中的循环进行分级,还有另一种方法,
您可以声明一个新变量来保存循环外的解码结果。这可以避免重复解码相同的 JSON 字符串并确保行为一致。方法如下: