플러터에서 새로운 위젯이나 함수를 만들었을 때 `The parameter can’t have a value of ‘null’ because of its type in Dart`에러가 발생하는 것을 종종 볼 수 있다. 이 메세지를 번역해보면 `다트에서는 파라미터로 null을 가질 수 없다`는 것이다.
다트에서 파라미터로 null을 가질 수 없는 이유는 null safety가 활성화 되어있기 때문이다. non-nullable 인자와 key는 null 이 될 수 없다. 함수와 생성자를 통해 null 값이 아님이 확인이 되어야 null safety를 통과할 수 있다.
class Header extends StatelessWidget {
const Header({
Key key,
}) : super(key: key);
// ...
}
예를 들어서 위와 같은 위젯이 있다고 가정하자. 생성자로 key를 갖지만 현재 상태에서는 key의 값이 null이 될 가능성이 생긴다. 그렇기 때문에 위 코드는 `The parameter can’t have a value of ‘null’ because of its type in Dart` 에러를 발생시킬 것이다.
이를 해결할 수 있는 3가지 방법이 있다.
1. required 사용
class Header extends StatelessWidget {
const Header({
required Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container();
}
가장 보편적인 해결방법이다. required가 앞에 선언되면 뒤에 올 변수는 꼭 set 되어야 함을 의미한다.
2. 기본값 사용
class Header extends StatelessWidget {
const Header({
Key key = const ValueKey('initialized key'),
}) : super(key: key);
}
위와같이 key에 default 값을 넣는 방법으로도 해결이 가능하다. constant. 즉, 상수 값만 넣을 수 있다.
3. Nullable Parameter 사용
class Header extends StatelessWidget {
const Header({
Key? key,
}) : super(key: key);
}
'?'를 사용하여 nullable 하게 만들어주는 방법도 있다. 하지만 모든 위젯에 key가 들어가는 것은 아니기 때문에 key에 null이 들어가게 되는 상황이 발생할 수도 있기 때문에 주의하여야 한다.
'Flutter' 카테고리의 다른 글
[Flutter] Widget(8) - ListTile에서 leading, tailing에 위젯 여러개 넣는 법 (0) | 2023.12.26 |
---|---|
[Flutter] UI(4) - ExpansionTile, Listile 아이콘 앞에 위치시키기(animation) (0) | 2023.12.25 |
[Flutter] PROJECT(1) - YOUTUBE MUSIC 홈 화면 구현 (1) | 2023.12.17 |
[Flutter] UI(3) - systemNavigationBar 색깔 바꾸기 (Device NavigationBar (0) | 2023.12.15 |
[Flutter] Widget(7) - FutureBuilder (0) | 2023.12.13 |