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

Flutter开发中多列表共享引用修改联动如何实现独立操作

问题原因

Dart 中对象默认采用引用传递,你的代码里appointments、allAppointments两个变量直接赋值为appointmentProvider.allAppointmentList,三个变量实际指向内存中同一个列表实例,对任意一个变量做增删改操作,本质都是修改同一个列表,自然会出现同步变化的问题。

修复方法

不要直接赋值原列表引用,给两个列表分别创建独立的副本即可,根据你的业务需求选浅拷贝或者深拷贝:

  • 仅做列表层面的操作(清空、增删元素、排序),不需要修改列表内单个Appointment对象的属性,用浅拷贝即可
  • 如果需要修改列表内Appointment对象的属性,必须用深拷贝,否则元素对象还是会联动

修改_loadAppointments方法里的setState代码块:

setState(() {
  isLoading = false;
  // 浅拷贝实现:生成两个独立的列表实例
  appointments = List.of(appointmentProvider.allAppointmentList);
  allAppointments = List.of(appointmentProvider.allAppointmentList);

  // 深拷贝实现(需要Appointment类实现copyWith方法或者toJson/fromJson序列化方法)
  // appointments = appointmentProvider.allAppointmentList.map((item) => item.copyWith()).toList();
  // allAppointments = appointmentProvider.allAppointmentList.map((item) => Appointment.fromJson(item.toJson())).toList();
});

补充说明:List.from和List.of都可以生成列表的浅拷贝,固定长度列表不要用List.from,优先用List.of类型安全性更高。

内容的提问来源于stack exchange,提问作者Kavishka Rajapakshe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:12:32