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

