반응형
[문제점]
플러터에 DropdownButton을 구글검색으로 나온 것과 같이 구현하는데 오류가 발생하였다. 오류가 난 코드는 아래와 같다.
class DropdownEaxampleState extends State<DropdownEaxample> {
final List<String> _valueList = ['month', 'two weeks', 'week'];
String _selectedValue = 'week';
@override
Widget build(BuildContext context) {
return DropdownButton(
value: _selectedValue,
items: _valueList.map((value) {
return DropdownMenuItem(
value: value,
child: Text(value),
);
}).toList(),
onChanged: (value) {
setState(() {
_selectedValue = value;
});
},
);
}
}
이렇게 코드를 작성하였더니 아래와 같은 오류가 나왔다.
A value of type 'Object?' can't be assigned to a variable of type 'String'.
Try changing the type of the variable, or casting the right-hand type to 'String'.
[해결방법]
오류의 원인은 마지막 onChanged의 value가 Object?의 형식인데 String형식인 _selectedValue에 넣은 것이다. 그러므로 다음의 두가지를 해결해주면 오류는 없어지게 된다.
- value가 Object가 아닌 String으로 만들기
- value가 null인지 아닌지 체크하기 (null safety)
class DropdownEaxampleState extends State<DropdownEaxample> {
final List<String> _valueList = ['month', 'two weeks', 'week'];
String _selectedValue = 'week';
@override
Widget build(BuildContext context) {
return DropdownButton<String>(
value: _selectedValue,
items: _valueList.map((value) {
return DropdownMenuItem(
value: value,
child: Text(value),
);
}).toList(),
onChanged: (value) {
setState(() {
_selectedValue = value!;
});
},
);
}
}
1번은 DropdownButton<String>으로 제네릭을 사용해주면 버튼에서 사용할 value의 타입을 string으로 지정해준다. 2번은 onChanged의 value를 value!로 바꾸어서 value의 값이 null이 아님을 알려준다. 만약 value의 값이 null이라면 오류가 나겠지만 우리는 value: _selectedValue로 초기값을 정해주었기 때문에 null이 되지 않는다.
반응형
'Mobile APP > Flutter' 카테고리의 다른 글
[Flutter] A RenderFlex overflowed by pixels on the bottom 에러 해결 (0) | 2022.02.02 |
---|---|
[Flutter] ListView.builder Exception caught by rendering library 오류 (0) | 2022.01.06 |
[Flutter] Bottom Navigation Bar Item label 없애기 (0) | 2022.01.04 |
[Flutter] Name source files using lowercase_with_underscores`. (0) | 2022.01.03 |
[Flutter] Container 배경 이미지 넣기 (0) | 2022.01.03 |
댓글