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
相关产品推荐
相关产品推荐

