You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:10:27