Flutter中向List<List>添加List<int>时出现列表引用异常问题求助
问题原因
Dart中的列表是引用类型,当你执行listOfDigits.add(digits)时,并没有将digits列表的内容复制一份存入listOfDigits,而是把digits列表的内存引用添加了进去。这意味着listOfDigits里的所有子列表,本质上都指向同一个内存地址的列表。后续对digits的任何修改(添加元素、清空),都会同步反映到所有引用它的子列表上。
解决方案
有两种常用的修复方式,任选其一即可:
方式1:添加digits的副本到listOfDigits
在添加时,创建digits的副本存入listOfDigits,而不是原引用。可以用以下几种方式创建副本:
- 扩展运算符
[...digits] List.from(digits)digits.toList()
修改后的按钮代码:
listOfDigits.add([...digits]); // 创建副本添加 digits.clear(); setState(() {});
方式2:添加后重新初始化digits
不使用clear()清空原列表,而是直接创建一个新的空列表赋值给digits,这样原列表的引用会被保留在listOfDigits中,后续操作的是全新的列表:
修改后的按钮代码:
listOfDigits.add(digits); digits = []; // 重新初始化新列表 setState(() {});
验证效果
修改后,第三次添加数字7时,listOfDigits会变成[[1,8,-9], [7]],之前的子列表不会被修改,符合预期。
内容的提问来源于stack exchange,提问作者Sarmed MQ Berwari
相关产品推荐
相关产品推荐

