Dart(Flutter)中如何通过循环访问动态命名变量的更新值
在Dart/Flutter中批量访问变量值的正确方式
你当前的问题核心是Dart不支持通过字符串拼接的方式直接访问变量,你拼出来的只是普通字符串,并非变量本身的引用。要解决这个问题,最合理的做法是把分散的变量替换为集合类型,比如List或Map,通过索引或键来批量访问值。
方案1:用List存储变量
将所有_selectedRegNoUpdate相关变量整合到一个List中,循环时直接通过索引获取对应值:
// 初始化List,填充6个初始值为'Reg No'的元素 List<String> _selectedRegNoUpdates = List.filled(6, 'Reg No'); // 下拉选择更新时,通过索引修改对应位置的值(比如更新第4个元素,索引从0开始) _selectedRegNoUpdates[3] = '12345'; // 循环访问 for(int i = item!['workedWith'].length; i < 6 ; i++){ print(i.toString()); String workedWithValue = _selectedRegNoUpdates[i]; // 直接通过索引获取值 print(workedWithValue); // 输出对应位置更新后的值 };
方案2:用Map存储变量
如果需要保留类似原变量名的标识,可以用Map,以字符串为键存储对应值:
// 初始化Map,键对应原变量名,值为初始值 Map<String, String> _selectedRegNoUpdates = { '_selectedRegNoUpdate': 'Reg No', '_selectedRegNoUpdate1': 'Reg No', '_selectedRegNoUpdate2': 'Reg No', '_selectedRegNoUpdate3': 'Reg No', '_selectedRegNoUpdate4': 'Reg No', '_selectedRegNoUpdate5': 'Reg No', }; // 下拉选择更新时,通过键修改对应值 _selectedRegNoUpdates['_selectedRegNoUpdate4'] = '12345'; // 循环访问 for(int i = item!['workedWith'].length; i < 6 ; i++){ print(i.toString()); String key = i == 0 ? '_selectedRegNoUpdate' : '_selectedRegNoUpdate$i'; String workedWithValue = _selectedRegNoUpdates[key]!; print(workedWithValue); // 输出更新后的值 };
原方法失效的原因
你之前拼接出的workedWithPosition只是字符串"_selectedRegNoUpdate3",它和变量_selectedRegNoUpdate3没有任何关联。Dart不会自动将字符串解析为变量引用,所以打印的只是字符串本身,而非变量存储的实际值。
内容的提问来源于stack exchange,提问作者WeCan
相关产品推荐
相关产品推荐

