美文网首页
flutter(dart) 如何解决list拷贝问题

flutter(dart) 如何解决list拷贝问题

作者: 阿牛_6a83 | 来源:发表于2022-11-07 11:48 被阅读0次

一、dart 究竟是值传递还是 引用传递?

首先声明个人结论,有问题欢迎讨论

结论:基本数据类型是值传递,其他类型是引用传递

我在前期开发期间经常会踩的一个坑就是:

当传递(包含多字段的自定义数据类型的对象)时,经常会出现接收处修改了某一个属性值,导致传递处的数据变化。

写个简单的例子重现一下:

var aList = ['唱', '跳', 'rap'];

Human x1 =Human(aList, 1);

Human x2 = x1;

x2.age =2;

x2.habits.add('篮球');

print('''

x1 = $x1;

x2 = $x2;

''');

class Human {

List?habits;

  int?age;

  Human(this.habits, this.age);

Human.copyFrom(Human old) {

habits =List.from(old.habits ?? []);

  age = old.age;

}

@override

  StringtoString() {

return '$habits and age is $age';

  }

}

运行结果肯定就会出现 x1和x2一毛一样

那我通常的处理方式就是在bean里面提供一个copy方法,对list做处理,断开引用传递

用list.from创建一个新的list阿斯顿 调整x2的创建方式 这样处理过后,x2内部的list和x1内部的list已经不是同一个引用

当然实际开发中情况不一定这么简单,可能我们传递的并不是一个数据模型,有可能是我们的操作model,这个时候再去写copy方法可能就会有点麻烦,所以我们会祭出大杀器 Tojson 再 FromJson,懂?

相关文章

网友评论

      本文标题:flutter(dart) 如何解决list拷贝问题

      本文链接:https://www.haomeiwen.com/subject/gmpbtdtx.html