말랑말랑제리스타일

플러터에서 List 사용시 발생하는 에러 본문

프로그래밍/플러터 앱개발

플러터에서 List 사용시 발생하는 에러

제리제리 2022. 10. 28. 13:12

플러터 2.0 사용할 때 List를 사용할 때 발생할 수 있는 에러가 몇 가지 있는데요. 그중 대표적인 List()라는 구문을 사용하면 발생 가능한 에러와 리스트에 add로 아이템 추가할 때 발생하는 에러에 대해 알아보겠습니다.

플러터에서 List를 List() 생성자로 초기화하면 발생하는 에러

반응형

플러터 2.0에서는 Null에 대해 상당히 예민해진 것 같습니다.

"The default 'List' constructor isn't available when null safety is enabled."

이런 에러가 보이는데요. 해석하면 Null을 허용하지 않기 때문에 List() 생성자를 사용할 수 없다는 거죠.

그러나 리스트를 만들 때 당연하게도 선언 부에서 아이템을 전부 넣어주는 경우는 잘 없습니다.

그럼 빈 리스트를 만들려면 어떻게 해야 할까요?

반응형

바로 List.empty()입니다.

List() 생성자 대신 List.empty() 메서드를 사용해주면 마법같이 에러가 사라집니다.

뭐 이런 게 다 있나 싶지만 어쨌거나 플러터 2.0에서 LIst() 생성자는 허용하지 않지만 List.empty()로 빈 리스트를 만드는 메서드는 자기들이 만들어놨네요. 참 아이러니하긴 한데 뭐 의미가 약간 다르긴 하죠.

플러터에서 아이템 추가할 때 나오는 런타임 에러

반응형

자 초기화를 했으면 리스트를 채워줄 수 있겠죠.

하지만 List.empty()로 초기화해준 리스트에 아이템을 추가하면 플러터 자체적으로 아래와 같은 런타임 에러가 발생합니다.

플러터 리스트 아이템을 추가할 때 발생 가능한 에러입니다.
플러터 리스트 아이템 추가시 발생하는 에러

"Cannot add to a fixed-length list"라는 에러가 발생하는데요.

우리는 fixed-length list라고 선언해준 적이 없지만 이런 에러가 발생했다는 말은 플러터에서 디폴트로 List.empty()라는 메서드로 초기화를 해주면 고정 길이 리스트로 초기화가 된다는 말이죠.

이 역시 해결 방법은 간단합니다.

List.empty() 메서드에 인자로 growable 값을 넣어주는 건데요.

List.empty() 대신 List.empty(growable:true)라고 초기화를 해주면 해당 에러가 사라지고 해당 고정 길이 리스트는 가변 길이 리스트가 됩니다.

아무래도 메모리 때문에 플러터 측에서 기본적으로 리스트 선언 시 고정 길이 리스트로 만들어주기 때문으로 보입니다.

반응형
Comments