티스토리 뷰
Flutter/에러 해결
flutter] Either zero or 2 or more [DropdownMenuItem]s were detected with the same value
철철박사 2024. 9. 9. 20:29반응형
DropdownButtonFormField를 사용하던 중, 다음과 같은 에러가 발생했다.
There should be exactly one item with [DropdownButton]'s value: Instance of 'LogCategory'.
Either zero or 2 or more [DropdownMenuItem]s were detected with the same value
'package:flutter/src/material/dropdown.dart':
Failed assertion: line 1604 pos 15: 'items == null || items.isEmpty || value == null ||
items.where((DropdownMenuItem<T> item) {
return item.value == value;
}).length == 1'
이 에러를 이해하기 위해서 알아야 할 DropDownButton의 속성은 다음과 같다.
value : 드롭 다운 아이템의 초기값
items : 드롭 다운으로 만들어질 아이템들
에러 문구에는 이 에러가 발생하는 이유는 다음과 같다고 한다.
1. items가 null인 경우
2. tems기 비어 있는 경우
3. value가 null인 경우
하지만 이 문구의 경우 외에도 다른 원인으로도 동일한 에러가 발생할 수 있다.
4. items에 중복된 아이템이 있는 경우
5. value가 items에 없는 경우
그러므로 위의 5가지의 경우에 해당하는 것이 아닌지 확인해 보자.
만일 사용자 정의 클래스를 value로 사용한다면 ==연산자와 hashCode를 정의해보자. 이렇게 하면 참조가 아닌 값으로 비교가 가능해 진다.
class LogCategory {
final int id;
final String name;
final int color;
LogCategory({required this.id, required this.name, required this.color});
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is LogCategory &&
other.id == id && // id로 비교
other.name == name; // 필요시 name으로도 비교 가능
}
@override
int get hashCode => id.hashCode ^ name.hashCode;
}
반응형
'Flutter > 에러 해결' 카테고리의 다른 글
댓글
공지사항