Flutter
bloc에서 copyWith을 직접만들면 안되는 이유
붕어사랑 티스토리
2024. 12. 30. 19:40
반응형
흔히보는 copyWith의 코드는 아래와 같다.
이 코드의 문제점은 어떤 값을 명시적으로 null로 하고 싶은데 null이 되지 않는다.
void main() {
User user = User(name: "abc", age:34);
print("${user.name} ${user.age}");
user.copyWith(name:null);
print("${user.name} ${user.age}");
}
class User {
final String? name;
final int? age;
User({this.name, this.age});
User copyWith({
String? name,
int? age,
}) {
return User(
name: name ?? this.name,
age: age ?? this.age,
);
}
}
abc 34
abc 34
해결방법은 아래와 같이 텅빈 객체를 이용하여 텅빈 객체와 null을 확실히 구분시켜준다.
그러면 텅빈 인풋과, 명시적인 null 인풋을 구분할수 있게 된다.
void main() {
User user = User(name: "abc", age: 34);
print("${user.name} ${user.age}");
user = user.copyWith(name: null);
print("${user.name} ${user.age}");
}
class User {
final String? name;
final int? age;
User({this.name, this.age});
User copyWith({
Object? name = const _Unset(),
Object? age = const _Unset(),
}) {
return User(
name: name is _Unset ? this.name : name as String?,
age: age is _Unset ? this.age : age as int?,
);
}
}
class _Unset {
const _Unset();
}
abc 34
null 34
반응형