본문 바로가기
코딩코딩/웹개발

[flutter] type 'ListView' is not a subtype of type 'List<Widget>

by g0n1 2022. 3. 25.
728x90
class FriendPage extends StatefulWidget {
  const FriendPage({Key? key}) : super(key: key);

  @override
  State<FriendPage> createState() => _FriendPageState();
}

class _FriendPageState extends State<FriendPage> {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
        future: fetchPost(),
        builder: (context, AsyncSnapshot snapshot) {
          dynamic children;
          if (snapshot.hasData) {
            // children = const [Text("dfdfdf")];
            children = ListView.builder(
            itemCount: snapshot.data!.length,
            itemBuilder: (context, int index) {
              return Card(
                  child: ListTile(
                title: Text(snapshot.data[index].userName),
                leading: const Icon(Icons.account_circle_sharp),
              ));
            },
          );
          } else if (snapshot.hasError) {
            children = <Widget>[
              const Icon(
                Icons.error_outline,
                color: Colors.red,
                size: 60,
              ),
              Padding(
                padding: const EdgeInsets.only(top: 16),
                child: Text('Error: ${snapshot.error}'),
              )
            ];
          } else {
            children = const <Widget>[
              SizedBox(
                width: 60,
                height: 60,
                child: CircularProgressIndicator(),
              ),
              Padding(
                padding: EdgeInsets.only(top: 16),
                child: Text('Awaiting result...'),
              )
            ];
          }
          return Center(
              child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: children,
          ));
        });

문제 상황

요청 데이터가 도착하면 ListView.builder로 각 데이터를 ListTile로 만들어 보여주려고 했으나 아래 에러 발생

문제 원인

snapshot.hasError나 요청중인 상황에서는 <Widget>[사이즈드박스, 패딩] 등을 보여주게 설정했는데, snapshot.hasdata에서는 혼자 다른 타입의 데이터를 보여주고 있었음. 개수도 달랐음. (다른 건 children인데 얘만 child)

 

해결 방법

else if와 else의 경우에도 단일 위젯을 보여주게끔 했더니 해결!

728x90

댓글