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

Flutter调用异步List类型DB API后List<File>变量被重置问题

问题根因定位
  • Dart中List属于引用传递类型,你当前代码中attachFiles = postModel.fileNotifierValues是直接将attachFiles指向了postModel内fileNotifierValues的内存地址,二者本质是同一个列表实例,没有做拷贝隔离。
  • db.checkRequirement是异步方法,代码执行到await处时会暂停当前函数执行,让出事件循环线程去执行其他任务。在这个等待间隙,有其他逻辑修改了postModel.fileNotifierValues列表本身(比如清空、移除元素操作),待异步查询完成回到当前函数时,attachFiles因为和原列表指向同一实例,所以长度同步发生了变化。
  • 可以排除checkRequirement函数本身的影响,该函数内部操作的是RequirementModel类型的列表,和File类型的attachFiles没有内存重叠,不会直接修改该变量。
修复方案

直接在赋值时对列表做浅拷贝即可实现实例隔离,修改赋值代码:

// 原代码
attachFiles = postModel.fileNotifierValues;
// 修改为
attachFiles = List.from(postModel.fileNotifierValues);

修改后attachFiles会指向全新的列表实例,后续原fileNotifierValues的修改不会再影响该变量。

内容的提问来源于stack exchange,提问作者BIS Tech

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:06:04