본문 바로가기
Flutter/Flutter FAQ

Flutter 'type 'List<dynamic>'은(는) 'List<Widget>'의 하위 유형이 아닙니다.', type 'List<dynamic>' is not a subtype of type 'List<Widget>'

by 베타코드 2023. 5. 11.
반응형

질문


Firestore 예제에서 복사한 코드 스니펫이 있습니다:

Widget _buildBody(BuildContext context) {
    return new StreamBuilder(
      stream: _getEventStream(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) return new Text('Loading...');
        return new ListView(
          children: snapshot.data.documents.map((document) {
            return new ListTile(
              title: new Text(document['name']),
              subtitle: new Text("Class"),
            );
          }).toList(),
        );
      },
    );
  }

하지만 이 오류가 발생합니다

type 'List<dynamic>' is not a subtype of type 'List<Widget>'

여기서 무엇이 잘못됐을까요?


답변


문제는 여기서 유형 추론이 예상치 못한 방식으로 실패한다는 것입니다. 해결책은 map 메소드에 유형 인수를 제공하는 것입니다.

snapshot.data.documents.map<Widget>((document) {
  return new ListTile(
    title: new Text(document['name']),
    subtitle: new Text("Class"),
  );
}).toList()

보다 복잡한 답은 children의 유형이 List<Widget>이지만 이 정보가 map 호출로 다시 흐르지 않는다는 것입니다. 이것은 maptoList에 따라 이어지기 때문일 수 있으며 클로저의 반환 값을 유형 주석으로 표시할 수 있는 방법이 없기 때문일 수 있습니다.

반응형

댓글