Похоже, вам нужен шаблон типа copyWith
:
class SomeObject {
final int id;
final String name;
final int upVote;
final int downVote;
final int favorite;
SomeObject({this.id, this.name, this.upVote, this.downVote, this.favorite});
SomeObject copyWith({
int id,
String name,
int upVote,
int downVote,
int favorite,
}) {
return SomeObject(
id: id ?? this.id,
name: name ?? this.name,
upVote: upVote ?? this.upVote,
downVote: downVote ?? this.downVote,
favorite: favorite ?? this.favorite,
);
}
}
Вы можете адаптировать его по своему усмотрению: upVoted
копий с увеличением upVote
, оставляя остальные те же, или позволяя их изменять.
SomeObject upVoted() {
return SomeObject(
id: id, // no need for 'this' here
name: name,
upVote: upVote + 1,
downVote: downVote,
favorite: favorite,
);
}
Комбинируя два, вы можете получить бесконечные вариации:
SomeObject upVoted() => copyWith(upVote: upVote + 1);
SomeObject downVoted() => copyWith(downVote: downVote + 1);
SomeObject upVoteRetracted() => copyWith(upVote: upVote - 1);
... что тогда заставляет задуматься, почему этот класс неизменен , Кажется, что было бы более разумно держать его и изменять его состояние, а не делать несколько копий с разными значениями.