4
respostas

erro ao criar lista

Quando eu uso o seguinte codigo apresentado tanto na aula quanto no forum:

 body: FutureBuilder(
        future: findAll(),
        builder: (context, snapshot) {
          final List<Contato>? contatos = snapshot.data as List<Contato>;
          if(contatos != null) {
            return ListView.builder(
              itemBuilder: (context, index) {
                return ContatoItem(contatos[index]);
              },
              itemCount: contatos.length,
            );
          }
          return Container();
        },
      ),

o codigo funciona porem ele me apresenta o seguinte erro

The following _CastError was thrown building FutureBuilder<List<Contato>>(dirty, state: _FutureBuilderState<List<Contato>>#fe489):
type 'Null' is not a subtype of type 'List<Contato>' in type cast
4 respostas

Se não me engano, o problema é que você tem que usar snapshot.data(), ao invés de snapshot.data (é uma função). Posso estar errado mas tente isso e compartilhe o resultado, ok.

O correto é snapshot.data mesmo, acredito que o problema seja nesse as List<Contato>;, no meu caso, coloquei que o Future Builder ira retornar o List, veja abaixo.

FutureBuilder<List<Contact>>(
          initialData: [],
          future: findAll(),
          builder: (context, snapshot) {
            switch (snapshot.connectionState) {
              case ConnectionState.none:
                break;
              case ConnectionState.waiting:
                return Center(child: Text("Carregando..."));
              case ConnectionState.active:
                break;
              case ConnectionState.done:
                List<Contact>? contacts = snapshot.data;
                return ListView.builder(
                  itemBuilder: (context, index) {
                    final Contact contact = contacts![index];
                    return _ContactItem(contact);
                  },
                  itemCount: contacts!.length,
                );
            }
            return Text('Unknown Error');
          }),

Entendi. Que bom que você conseguiu. E lembre de colocar a sua resposta como a solução, para fechar o tópico.

Boa tarde. Apenas compartilhando conhecimento. Tive esse mesmo problema, segui os passos do Leonardo porém removi apenas o ponto de interrogação da frente do List e funcionou. E também no lugar de passar uma List() no initialData, passei [] como lista vazia.

      body: FutureBuilder<List<Contact>>(
        initialData: [],
        future: Future.delayed(Duration(seconds: 1)).then((value) => findAll()),
        builder: (context, snapshot) {

            final List<Contact> contacts = snapshot.data as List<Contact>;
            return ListView.builder(
              itemBuilder: (context, index) {
                final Contact contact = contacts[index];
                return _ContactItem(contact: contact,);
              },
              itemCount: contacts.length,
            );
        },
      ),