본문 바로가기

개발 이야기/flutter

[dart] 타입 캐스팅, 옵셔널 체이닝 | type casting + optional chaining

source: google image

 

type 'A' is not a subtype of type 'B'

아래와 같은 오류가 뜬다.

 

final List<String> authors = json['authors']

// 에러
=> type 'List<dynamic>' is not a subtype of type 'List<String>' 

 

json['authors'].runtimeType 을 로깅해서 봤더니 List<dynamic> 이라고 떴다. 만약 실제로 String 타입이 오고 dart가 이를 모르는 상황이라면 타입 캐스팅을 위해 아래처럼 바꿔주면 된다.

 

(하지만 타입이 정말 다른 경우는 똑같은 에러가 발생할 것이다.)

 

 

optional chaining

optional chaining은 null이 올 수 있는 객체라면, null이 아닐 때만 그 안의 method나 값을 꺼낼 수 있게 해주는 것이다.

예를 들어 타입 캐스팅하려는 객체가 null이 될 수 있다면, 객체에 optional chaining ?. 을 붙여 null이 아닌 경우에 cast 함수가 실행되도록 할 수 있다.

 

final List<String> authors = json['authors']?.cast<String>()

 

 


references