전화번호부 정렬을 하면서 map object를 사용해서 하는 중이었습니다.
map은 정렬이 안되니 key_list를 따로 생성하여 key_list를 정렬하고 key로 접근해서 출력해서 정렬에는 성공했습니다. 그런데 과정에서 의문이 있습니다.
var nameAndPhone = {
'영희': '010-1549-1511',
'횟집': '02-5164-1261',
'미용실': '070-9852-1598'
};
var nameKey = ['영희', '횟집', '미용실'];
이런 상태에서
body: ListView.builder(
itemCount: total,
itemBuilder: (c,i){
return ListTile(
leading: Icon(Icons.account_circle,size: 40),
title: Text(nameKey[i]),
subtitle: Text(nameAndPhone[nameKey[i]]),
);
},
),
이 부분의 subtitle: Text() 위젯부분의 border 부분이 빨간밑줄이 끄이면서 오류가 나고 프로그램 실행이 되지 않습니다. 그래서 혹시나 key를 통해 접근한 map value의 type이 String이 아니라선가? 해서
Text(nameAndPhone[nameKey[i]].toString()) 으로 바꿨더니 오류가 사라지고 실행이 가능했습니다.
어 그러면 map value의 type이 진짜 String이 아니라고? 가 궁금해서 따로 type을 print해봤습니다.
print(nameAndPhone[nameKey[0]].runtimeType);
print(nameAndPhone[nameKey[0]].toString().runtimeType);
Output> String, String
엥 둘다 String이 나옵니다.
그러면 대체 어떤 차이로 오류가 발생하고 발생하지 않는 건가요??