728x90
아래와 같은 에러가 뜬다면, 타입이 맞지 않아 발생하는것이다.
근본적인 해결법은 좌변과 우변의 타입을 일치해주면 되는 그런? 간단한 것.....
하지만, Flutter2.0 null-safety도입 후 빈번하게 발생하는 타입 에러⭐ 자주 사용되는 해결법을 먼저 보겠습니다.
1. 변수 뒤에 as ~~ 붙여주기
ex) enum 타입으로 선언되었을 때
enum Gender { Man, Women }
...
Gender _gender = Gender.Man;
...
_gender = value as Gender ;
2. 변수 뒤에 ! 추가 -강제로 null이 아님(non-null)을 명시
ex) boolean 타입
var _isChecked = false ; //var은 임시적 타입선언 -변수에 있는 값 판단해서 타입인식
...
_isChecked = value ! ;
3. 인자 앞에 required 입력 - non-null임을 명시
4. 타입 뒤에 ? 추가 -널을 허용(nullable)
ex) String
5. 변수 선언시 앞에 late 입력 -사용전 미뤄두기
CODE
Error 발생
import 'package:flutter/material.dart';
class Dropdown extends StatefulWidget {
@override
_DropdownState createState() => _DropdownState();
}
class _DropdownState extends State<Dropdown> {
final _valueList = ['사과', '감자', '오렌지'];
var _selectedValue = '사과';
@override
Widget build(BuildContext context) {
return Container(
child: DropdownButton(
value: _selectedValue,
items: _valueList.map(
(value) {
return DropdownMenuItem(
value: value,
child: Text(value),
);
},
).toList(),
onChanged: (value) {
setState(() {
_selectedValue = value;
});
},
),
);
}
}
Error 해결
- 아래 주석 설명과 같이, 좌변의 타입이 string인데 앞서 list로 만들어주면서 그 안의 value가 list형(Object가 포함)이 되었다. 그래서 toString으로 우변의 타입도 String으로 만들어줌
import 'package:flutter/material.dart';
class Dropdown extends StatefulWidget {
@override
_DropdownState createState() => _DropdownState();
}
class _DropdownState extends State<Dropdown> {
final _valueList = ['사과', '감자', '오렌지'];
var _selectedValue = '사과';
@override
Widget build(BuildContext context) {
return Container(
child: DropdownButton(
value: _selectedValue,
items: _valueList.map(
(value) {
return DropdownMenuItem(
value: value,
child: Text(value),
);
},
).toList(), //list로 되면서 value가 Object타입(null-safety적용후)
onChanged: (value) {
setState(() {
_selectedValue = value.toString(); //그래서 좌측 String타입에 맞춰 string으로 변환시켜줌
});
},
),
);
}
}
타입 관련되서 정리를 해보면, Flutter2.0부터 바뀐 null-safety에서는
<null-safety적용 후>
✔ Object 타입: Iterable, num, List, double, int
✔ String은 String? 로 null허용 가능
왼쪽 : Null-safety적용 전 / 오른쪽: Null-safety 적용 후 (null타입이 별도 타입으로)

728x90
반응형
'Develop > Flutter' 카테고리의 다른 글
[Flutter x Firebase] 구글 소셜로그인 google social Login + keytool 사용법 (0) | 2021.08.24 |
---|---|
[Flutter ❌] RenderFlex overflowed by Infinity pixels on the bottom.에러를 해결해보아요 (0) | 2021.08.01 |
[광고] Flutter노션을 오픈 했다요💎 (4) | 2021.07.20 |
[Flutter #4] Firebase연동하기2- firestore cloud (0) | 2021.07.16 |
[Flutter #3] Firebase 연동하기(android) 1 (0) | 2021.07.16 |
댓글