1
resposta

Erro ao ler campo do cloud firestore após configurar fireauth

Prezados, Estou com um erro ao ler campo do cloud firestore após configurar fireauth. É um problema de recuperação do campo. Ao usar Text(doc.get('titulo')) ocorre o erro "Bad state: field does not exist within the DocumentSnapshotPlatform". Já verifiquei o nome do campo e a sintaxe. Mudei também a regra de acesso e mudei este trecho: allow read, write: if request.auth != null;

Segue o trecho do código:

Expanded(
              child: StreamBuilder<QuerySnapshot>(
                stream: _firestore.collection('posts').snapshots(),
                builder: (context, snapshot) {
                  if (!snapshot.hasData) {
                    return CircularProgressIndicator();
                  } else {
                    return ListView(
                      children: snapshot.data!.docs.map((doc) {
                        return ListTile(
                          title: Text('titulo'),
                          subtitle: Column(
                              mainAxisSize: MainAxisSize.min,
                              children: [
                                Text(doc.get('titulo'))        (!!!! ao comentar esta linha o erro desaparece)
                              ]),

Desculpe, saiu desconfigurado o texto. não soube corrigir

1 resposta

Olá Aristides! Entendo que esteja tendo problemas com a leitura de campos do Cloud Firestore após configurar o FirebaseAuth. Vamos tentar resolver isso juntos!

Pelo que você descreveu, o erro ocorre quando você tenta acessar o campo 'titulo' do seu documento. O erro "Bad state: field does not exist within the DocumentSnapshotPlatform" geralmente ocorre quando você tenta acessar um campo que não existe no documento recuperado.

Embora você tenha mencionado que verificou o nome do campo e a sintaxe, sugiro que você verifique novamente o nome do campo no Firestore para garantir que ele corresponda exatamente à string 'titulo' (lembre-se de que é case-sensitive).

Além disso, é importante garantir que o documento que você está tentando acessar realmente existe e que ele contém o campo 'titulo'.

No seu código, você está tentando acessar o campo 'titulo' para cada documento na coleção 'posts'. Se algum desses documentos não tiver o campo 'titulo', você receberá o erro mencionado.

Uma maneira de evitar isso seria verificar se o campo 'titulo' existe antes de tentar acessá-lo. Você pode fazer isso usando o método exists do DocumentSnapshot. Aqui está um exemplo de como você pode fazer isso:

Expanded(
  child: StreamBuilder<QuerySnapshot>(
    stream: _firestore.collection('posts').snapshots(),
    builder: (context, snapshot) {
      if (!snapshot.hasData) {
        return CircularProgressIndicator();
      } else {
        return ListView(
          children: snapshot.data!.docs.map((doc) {
            if (doc.data().containsKey('titulo')) {
              return ListTile(
                title: Text('titulo'),
                subtitle: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: [
                    Text(doc.get('titulo'))
                  ]),
              );
            } else {
              return ListTile(
                title: Text('titulo'),
                subtitle: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: [
                    Text('Campo título não encontrado')
                  ]),
              );
            }
          }).toList(),
        );
      }
    },
  ),
)

Neste exemplo, verificamos se o campo 'titulo' existe antes de tentar acessá-lo. Se o campo 'titulo' não existir, exibimos a mensagem 'Campo título não encontrado' em vez de tentar acessar o campo.

Espero que isso ajude a resolver o problema! Lembre-se, a chave aqui é garantir que o campo que você está tentando acessar realmente exista no documento. Espero ter ajudado e bons estudos!