작성
·
70
0
final rawItemsList = response.data['response']['body']['items'] as
List<Map<String, dynamic>>;
해당 코드에서
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'List<Map<String, dynamic>>' in type cast
#0 StatRepository.fetchData (package:microdust_study/repository/stat_repository.dart:26:69)
<asynchronous suspension>
flutter: type 'List<dynamic>' is not a subtype of type 'List<Map<String, dynamic>>' in type cast
이 에러가 계속 발생합니다....
답변 3
1
{
"daegu": "22",
"chungnam": "23",
"incheon": null,
"daejeon": "19",
"gyeongbuk": "24",
"sejong": "23",
"gwangju": "27",
"jeonbuk": "29",
"gangwon": "18",
"ulsan": "27",
"jeonnam": "22",
"seoul": "26",
"busan": "25",
"jeju": "23",
"chungbuk": "26",
"gyeongnam": "21",
"dataTime": "2024-12-04 18:00",
"dataGubun": "1",
"gyeonggi": "24",
"itemCode": "PM10"
},
현재 데이터에서 5번쨰 인덱스에서 null 값이 들어와서 발생하는 에러 입니다. API 버그죠 ㅎㅎ
List<StatModel> stats = [];
for (Map<String, dynamic> item in rawItemsList) {
final dateTime = item['dataTime'];
for (String key in item.keys) {
if (skipKeys.contains(key)) {
continue;
}
final reginStr = key;
final stat = key == 'incheon' ? '25' : item[reginStr]; // 인천일 때 강제로 값 넣기
stats = [
...stats,
StatModel(
region: Region.values.firstWhere((e) => e.name == reginStr),
stat: double.parse(stat),
dateTime: DateTime.parse(dateTime),
itemCode: itemCode)
];
}
}
위에 인천일 때 강제로 데이터를 넣어주면 우선 해결됩니다
0
0
안녕하세요, 인프런 AI 인턴입니다. JY Hwang님.
유사한 문제에 대한 해결 답변을 확인해본 결과, type casting 에러와 관련된 비슷한 질문과 답변을 찾았습니다. 아래 링크들을 참고해보세요:
이 문제는 주로 API 응답에서 예상하지 못한 데이터 타입이 반환될 때 발생합니다. response.data['response']['body']['items']
가 List<Map<String, dynamic>>
타입이라기보다 List<dynamic>
이 반환되는 상황입니다. 아래와 같이 디버깅 해보시길 권장합니다:
final rawItemsList = response.data['response']['body']['items'];
if (rawItemsList is List) {
List<Map<String, dynamic>> items = rawItemsList.map((item) =>
item as Map<String, dynamic>).toList();
}
위 코드를 통해 응답 데이터가 의도한 타입으로 변환되었는지를 확인할 수 있으며, 이런 방식으로 에러를 피할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.