본문 바로가기
Flutter

[Flutter] The parameter can’t have a value of ‘null’ because of its type in Dart 에러 해결

by 아마도개발자 2023. 12. 21.

 

플러터에서 새로운 위젯이나 함수를 만들었을 때 `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이 들어가게 되는 상황이 발생할 수도 있기 때문에 주의하여야 한다.