Flutter懒加载问题:移除临时List时原List被同步移除
Flutter懒加载临时列表修改引发原始列表同步变更问题
我正在学习Flutter懒加载功能,触发页面底部懒加载并调用_lazlLoadingLoadMore()方法时出现异常:原本仅想移除临时列表tempList的部分数据,但原始列表dataList也被同步移除了。
相关代码
... List<ModelData> dataList = value.data; // 注:原代码中`value.data.length`应为赋值列表而非长度,推测是笔误 ... Future _lazlLoadingLoadMore() async { setState(() { _loading = true; }); increment = increment + 1; if (increment >= widget.value.data.length) { increment = widget.value.data.length; } tempList = dataList; tempList.removeRange(increment, dataList.length); setState(() { _loading = false; }); }
运行截图
- 首次运行截图:

- 第二次运行截图:

问题原因
Dart中列表属于引用类型,tempList = dataList并没有创建新列表,只是让tempList和dataList指向内存中同一个列表实例。对tempList执行的removeRange操作,本质上是直接修改原始的dataList。
解决方案
需要创建dataList的独立副本后再赋值给tempList,常用实现方式有三种:
- 使用
List.from():tempList = List.from(dataList); - 使用扩展运算符:
tempList = [...dataList]; - 使用
toList():tempList = dataList.toList();
修改后的关键代码片段:
// 替换原有的tempList = dataList; tempList = [...dataList]; tempList.removeRange(increment, dataList.length);
内容的提问来源于stack exchange,提问作者Alifa Al Farizi
相关产品推荐
相关产品推荐

