Flutter列表值不更新:machineDetails无法获取_machines的code值
解决Flutter列表赋值后字段仍为null的问题
从你提供的代码和打印输出来看,核心问题很明确:machineDetails列表的每个元素都是null,虽然列表长度和_machines一致(都是6),但你尝试用可选链?.赋值时,因为对象本身不存在,赋值操作直接被短路了,所以code字段始终是null。
问题原因分析
你打印的MachineDetails $i code: null其实已经给出了线索:当执行machineDetails[i]?.code = _machines[i].vCodigo时,machineDetails[i]是null,可选链操作符?.会直接终止后续操作,并不会真正给code赋值。这大概率是因为你初始化machineDetails时,只是创建了一个指定长度的列表,但没有为每个位置创建对应的MachineDetail实例(比如用了List.filled(6, null)这类方式)。
解决方案
要解决这个问题,你需要先确保machineDetails的每个位置都存在一个已初始化的MachineDetail对象实例,再进行赋值操作:
提前初始化
machineDetails为包含实例的列表
在进入赋值循环之前,先生成对应数量的MachineDetail实例填充列表:// 假设MachineDetail是你的自定义数据类,这里生成对应数量的实例 machineDetails = List.generate(_machines.length, (index) => MachineDetail());修改赋值逻辑,移除不必要的可选链
现在列表元素都是有效的实例了,不需要再用?.,直接赋值即可:Future<void> _registerTime(int index) async { try { setState(() { _loading = true; }); String res = await gruposRepo.timeRegisterWorks( widget.worker.toString(), widget.work, widget.product, widget.task, _machines[index].vCodigo ); print(res); print("MachineDetails Lenght RegisterTime: ${machineDetails.length}"); // 先初始化machineDetails的实例 machineDetails = List.generate(_machines.length, (index) => MachineDetail()); for (int i = 0; i < _machines.length; i++) { print('Machines $i code: ${_machines[i].vCodigo}'); // 直接赋值,不需要可选链 machineDetails[i].code = _machines[i].vCodigo; print('MachineDetails $i code: ${machineDetails[i].code}'); if (res == '1') { machineDetails[i].working = true; } else if (res == '2') { machineDetails[i].working = false; } } print(machineDetails[index].working); showDialog( context: context, builder: (context) { return AlertDialog( title: Text(Translations.of(context).trans('saved')), actions: <Widget>[ FlatButton( child: Text('OK'), onPressed: () => Navigator.of(context).pop(), ) ], ); }); } catch (e) { this._errorMsg = e.toString(); } setState(() { _loading = false; }); }
额外检查点
- 确认
MachineDetail类的code和working字段不是final修饰的(或者有对应的setter方法),否则也会导致赋值失败; - 如果
machineDetails是在其他地方初始化的,也要确保那里是生成实例而非填充null。
内容的提问来源于stack exchange,提问作者André Sousa
相关产品推荐
相关产品推荐

