颤振/飞镖全局变量列表覆盖所有列表项,并添加最新列表



我有一个用于表单数据的单页应用程序,该应用程序获取文本和照片列表并创建一个word文档。

在查看文档列表时,我注意到所有条目都具有最近添加的值。

我正在使用这样的全局变量:

class FormData {
static String title = '';
static String procedureCovers = '';
static String department = '';
static String section = '';
static String isolationOfficer = '';
static String supervisor = '';
static String reviewer = '';
static List<dynamic> mechanicalIsolations = [];
static List<dynamic> electricalIsolations = [];
static dynamic isolationOfficersSignature;
static dynamic supervisorsSignature;
static dynamic reviewersSignature;
}

大多数表单数据工作正常,只是当我去编辑列表时。我看到了覆盖变量的问题。

我的列表元素的格式是这样的:

Map<String, dynamic> mechanicalIsolationData = {
'isolation': '',
'isolateAt': '',
'circuitValve': '',
'imageFilePath': '',
'notes': '',
};

Map<String, dynamic> electricalIsolationData = {
'isolation': '',
'isolateAt': '',
'circuitValve': '',
'notes': '',
};

我正在添加我认为是列表条目的新空白实例:

FormData.mechanicalIsolations.add(mechanicalIsolationData);

但新列表项具有上一个列表项的值。

然后,当我去设置最新列表项字段的值时,它会用新值覆盖所有列表项。我这样设置:

FormData.mechanicalIsolations[widget.listIndex]['isolation'] = text; 

我已经检查了列表索引,它是正确的数字,我已经检查了它被设置为的值,它是不同的。但它仍然使用该值覆盖所有以前的列表元素。

我知道我这样做的方式是错误的,我只是不确定究竟是什么导致了它以及该怎么做才能解决它。

感谢您的帮助

虽然从您发布的代码中并不完全清楚,但问题很可能是由您的 Maps(mechanicalIsolationDataelectricalIsolationData(是全局变量引起的。因此,当您认为使用FormData.mechanicalIsolations.add(mechanicalIsolationData);将新的空白实例添加到 List 时,您不会添加新实例,而只是添加对 List 的引用,该引用指向同一mechanicalIsolationData对象。稍后更改mechanicalIsolationDataMap 中的值时,所有列表元素都会更新,因为它们都指向同一对象。

长话短说:您正在重用全局变量,并不断向列表添加指向同一变量的引用,因此最终得到一个具有相同元素的列表。

为避免这种情况,请确保每次调用该方法时都实例化一个新的 Map,该方法负责填充mechanicalIsolationDataelectricalIsolationData。喜欢这个:

addMechanicalIsolationData(String isolationValue, int isolateAtValue, String circutValveValue, String path, String notes){
Map<String, dynamic> mechanicalIsolationData = Map();
mechanicalIsolationData['isolation'] = isolationValue;
mechanicalIsolationData['isolateAt'] = isolateAtValue;
mechanicalIsolationData['circuitValve'] = circuitValveValue;
mechanicalIsolationData['imageFilePath'] = path;
mechanicalIsolationData['notes'] = notes;
mechanicalIsolations.add(mechanicalIsolationData);
}

相关内容

  • 没有找到相关文章

最新更新