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

Flutter(Dart)使用Tinder滑动卡片时出现cannot remove from unmodifiable list错误如何解决

问题原因解析
  1. Dart 中用 const 修饰的列表属于编译时常量,默认被锁定了增删改操作,任何对这类常量列表本身的移除、新增、修改操作都会直接抛出cannot remove from unmodifiable list异常。
  2. 你在initState中直接执行lstUsers = users赋值,本质是把状态里的lstUsers指针直接指向了外部定义的常量列表,并没有创建新的可变列表拷贝,后续调用lstUsers.removeAt()本质还是在操作那个不可修改的常量列表,自然触发报错。
  3. 额外说明:initState阶段不需要套setState赋值,这个阶段是组件首次构建前的初始化逻辑,直接修改状态变量即可。
修复方案
  • 修改initState中的赋值逻辑,基于常量列表创建一个新的可变列表:
@override
void initState() {
  super.initState();
  // 用List.from基于常量列表创建新的可变列表,不再引用原常量列表
  lstUsers = List.from(users);
  lstUsersLength = lstUsers.length;
}
  • 优化建议:不需要单独维护lstUsersLength变量,直接使用lstUsers.length获取当前列表长度即可,避免两个变量更新不同步引发的额外问题,修改后的updateStack可以简化为:
void updateStack(int index) {
  setState(() {
    lstUsers.removeAt(index);
  });
}

内容的提问来源于stack exchange,提问作者who-aditya-nawandar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:18:04