반응형
흔히보는 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
반응형
'Flutter' 카테고리의 다른 글
ios에서 크래시가 났을때 분석방법 (1) | 2025.01.02 |
---|---|
dynamic사용시 주의점 (0) | 2024.12.31 |
flutter gpu 예제 분석 (4) | 2024.09.11 |
연속적인 애니메이션을 만드는 방법 (0) | 2024.08.22 |
Bloc에서 event를 await 하는 방법 (0) | 2024.08.14 |
댓글