Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro ao atribuir object? a uma variavel List<Contact>

Seguindo as aulas, temos uma divergência com o que é ensinado no vídeo (devido a versão do flutter acredito eu).

Ao usar o seguinte trecho:

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

Acusando esse erro:

Performing hot restart...
Syncing files to device sdk gphone x86 arm...
lib/screens/contacts_list.dart:16:51: Error: A value of type 'Object?' can't be assigned to a variable of type 'List<Contact>'.
 - 'Object' is from 'dart:core'.
 - 'List' is from 'dart:core'.
 - 'Contact' is from 'package:bytebankoficial/models/contact.dart' ('lib/models/contact.dart').
          final List<Contact> contacts = snapshot.data;
                                                  ^
Restarted application in 185ms.

Como proceder?

2 respostas
solução!

Acabei conseguindo resolver utilizando o genérics no FutureBuilder.

Segue como ficou:

// inserido generics no FutureBuilder
body: FutureBuilder<List<Contact>>(
        future: findAll(),
        builder: (context, snapshot) {
          final List<Contact>? contacts = snapshot.data; // usado null safe na lista pois é regra da nova versão do flutter
          if (contacts != null) { //feito if para validar nulo
            return ListView.builder(
              itemBuilder: (context, index) {
                final Contact contact = contacts[index];
                return _ContactItem(contact);
              },
              itemCount: contacts.length,
            );
          }

          return Container();
        },

Obtive um erro parecido e isso não resolvel :

A value of type 'Object?' can't be assigned to a variable of type 'List'. Try changing the type of the variable, or casting the right-hand type to 'List'.dartinvalid_assignment

Solução encontrada : 

body: FutureBuilder(
    future: 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);
        },
        itemCount: contacts.length,
      );
    },
  ),

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software