Копирование ссылки в Dart
При присваивании объекта другой переменной копируется не сам экземпляр, а ссылка на него. Обе переменные указывают на один объект в памяти:
class Post {
String title;
int likes;
Post(this.title, this.likes);
}
Создадим объекты и выведем результат:
var post = Post("note", 30);
var alias = post;
print(identical(post, alias));
Изменение поля по одной переменной видно и у второй - меняется общий объект:
class Post {
String title;
int likes;
Post(this.title, this.likes);
}
Создадим объект, заполним поля и проверим результат:
var post = Post("note", 30);
var test = post;
test.title = "eric";
print(post.title);
print(test.title);
Так же ведут себя объекты внутри списка: элемент хранит ссылку, и изменение полей объекта сохраняется для всех переменных с той же ссылкой:
class Post {
int likes;
Post(this.likes);
}
Поместим объекты в список:
var posts = <Post>[Post(20)];
var first = posts[0];
first.likes = 25;
print(posts[0].likes);
Создайте объект Post и присвойте его переменной copy.
Измените заголовок в copy. Выведите заголовок из исходной переменной.
Запишите объект Employee в элемент списка.
Возьмите этот элемент в отдельную переменную,
измените зарплату. Выведите зарплату из списка.