flutter a=b b改变a也会变

超哥 2024-2-18 17:28:29 578 0 来自 中国
flutter a=b b改变a也会变
在Flutter中,如果你执行了 a = b 操作,并且 a 和 b 是同一类型的对象,那么这个操作实际上是将 b 的引用赋给了 a。这意味着如果你之后改变了 b 指向的内容,a 也会反映出这种改变,因为它们此时指向的是内存中的同一个对象。
如果你想要 a 保持原有的值,并且 b 的变化不影响 a,你需要进行深拷贝。具体的实现方式依赖于你的数据类型。
例如,如果 a 和 b 都是 List 类型的,你可以使用 List.from 来进行深拷贝:
  1. var a = [1, 2, 3];
  2. var b = List.from(a); // 深拷贝

  3. // 之后修改b,a不会改变
  4. b[0] = 4;
  5. print(a); // 输出 [1, 2, 3]
  6. print(b); // 输出 [4, 2, 3]
复制代码
如果 ab 是自定义对象,你需要确保在对象类中实现了深拷贝的逻辑。例如,如果你有一个 Person 类:

  1. class Person {
  2.   String name;
  3.   int age;

  4.   Person(this.name, this.age);

  5.   Person copyWith({name, age}) {
  6.     return Person(name ?? this.name, age ?? this.age);
  7.   }
  8. }

  9. void main() {
  10.   var a = Person(name: 'Alice', age: 30);
  11.   var b = a.copyWith(); // 深拷贝

  12.   b.name = 'Bob';
  13.   print(a.name); // 输出 Alice
  14.   print(b.name); // 输出 Bob
  15. }
复制代码
在这个例子中,copyWith 方法创建了一个新的 Person 对象,并将原对象中的非空属性复制过去,如果调用时未指定则使用原对象的属性值。这样,改变 b 的属性不会影响 a


坑很多慢慢踩 藏宝库28xin.com原创


您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋 藏宝库It社区 ( 冀ICP备14008649号 )

GMT+8, 2024-4-27 13:54 , Processed in 0.150638 second(s), 35 queries . © 2003-2025 cbk Team.

快速回复 返回顶部 返回列表