inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

JSON 반환값을 StatModel로 변경하기

해결이 안되는 에러 질문드려요.

295

JY Hwang

작성한 질문수 8

1

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


이 에러가 계속 발생합니다....

flutter 클론코딩

답변 3

1

femun0427

 {
                    "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

코드팩토리

안녕하세요!

response.data['response']['body']['items'] <- 이 부분을 출력해보시고 타입이 일치 하는지 보여주세요!

감사합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 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();
}

위 코드를 통해 응답 데이터가 의도한 타입으로 변환되었는지를 확인할 수 있으며, 이런 방식으로 에러를 피할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

198강 (){onTap(e);}의 이해 돕기

0

26

1

video_call 플러그인 설치후 에러 발생

0

45

1

SDK 안드로이드 설치 질문!

0

59

1

코드팩토리 디스코드 링크 다시 부탁드려요~

0

92

1

Webview를 이용해서 URL 상의 페이지 출력 불가

0

70

1

홈스크린 함수를 함축해서 main.dart에 옮기는 문제

0

55

1

플레이스토어

0

59

1

아고라 엔진 init 함수의 반환타입이 Future<void> 이것의 의미는 무엇인가요?

0

55

1

가이드라인 질문

0

57

0

emulator 에러 환경설정 뭐가 문제 일까요??

0

76

1

emulator 실행 오류

0

93

3

Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련

0

71

1

pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의

0

43

1

setState()를 호출하지 않으면 build가 실행 안되는 건가요?

0

53

1

video_call 플러그인 설치시 에러문제

0

64

1

children 안의 if 문에서 { } 못쓰는 이유?

0

48

1

이렇게 오류가 떠요

0

63

1

AppBar 사용했는데

0

61

2

[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다

0

56

1

StatefulWidget 실습 에러가 발생합니다.[해결완료]

0

63

1

Video Player 프로젝트에 대한 추가 질문

0

53

0

Row위젯이나 column위젯의 위치는 누가 정하나요??

0

42

1

geolocator 오류때문에 개발진행이 불가능입니다

0

63

1

API 관련 이슈

0

86

2