He estado intentando obtener datos de un documento de las colecciones de / users, pero el problema es que después de declarar el constructor: que es un parámetro requerido para FutureBuiulder, los datos no lo pasan y obtengo data = null.
¿Qué estoy haciendo mal?

future: FirebaseFirestore.instance
              .collection('users')
              .doc(uid)
              .get()
              .then((DocumentSnapshot documentSnapshot) {
            if (documentSnapshot.exists) {
              print('The Documents Exists');
              print(documentSnapshot.data());
            }
            else {
              print('The document Do not Exist');
            }
              } //here closes then((DocumentSnapshot documentSnapshot) {
              ),// here closesthen((DocumentSnapshot documentSnapshot)

Consigo el documento correcto como puede ver a continuación en la imagen
Sin embargo, los datos no pasan después del constructor:

builder: (context, documentSnapshot) {
              if (documentSnapshot.hasData) {
                print('The Documents Exists');
                print(documentSnapshot.data());
              }
              else {
                print('The document Do not Exist');
              }

enter image description here

EDITAR

Aquí está mi código completo:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';

class NewHome extends StatefulWidget {
  @override
  _NewHomeState createState() => _NewHomeState();
}

class _NewHomeState extends State<NewHome> {
  FirebaseFirestore firestore = FirebaseFirestore.instance;
  FirebaseAuth auth = FirebaseAuth.instance;

  @override
  Widget build(BuildContext context) {
    final User user = auth.currentUser;
    final uid = user.uid;
    return new Scaffold(
        body: new Container(
            child: FutureBuilder(
                future: FirebaseFirestore.instance
                    .collection('users')
                    .doc('uid')
                    .get(),


                builder: (context, snapshot) {
                  DocumentSnapshot manuais =
                  snapshot.data;
                  if (snapshot.hasData) {
                    print('okkk');
                  }
                  else{
                    print('nopeeeee');
                  }

            return Container(
                      padding: EdgeInsets.all(16),
                      child: ListView.builder(
                          itemCount: snapshot.data.documents.length,
                          itemBuilder: (context, uid) {
                            return Card(
                                color: Colors.grey[250],
                                child: Container(
                                    padding: EdgeInsets.all(10),
                                    child: Column(
                                        crossAxisAlignment:
                                            CrossAxisAlignment.start,
                                        children: <Widget>[
                                          new Image.asset(
                                            'Images/pdflogo.png',
                                            width: 32,
                                          ),
                                          Center(
                                            child: Text(
                                              (snapshot
                                                  .data()['nome']
                                                  .toString()),
                                              maxLines: 1,
                                              overflow: TextOverflow.ellipsis,
                                              style: TextStyle(fontSize: 16),
                                            ),
                                          ),
                                        ])));
                          }));
                })));
  }
}

1
KeplerDuff 21 sep. 2020 a las 04:18

2 respuestas

La mejor respuesta

No uses then con FutureBuilder

Pase su método async directamente a future y luego solo se resuelve en una instantánea, y podrá acceder a diferentes estados como hasData, hasError getters.

FutureBuilder(
      future: FirebaseFirestore.instance
          .collection('users')
          .doc("UID")
          .get(),
      builder: (context, snapshot) {
        if(snapshot.hasData){
            /// documentSnapshot.data()
        }
        return Container();
      }
    );
1
Suraj Nair 21 sep. 2020 a las 01:50

Ahora estoy obteniendo la clase 'DocumentSnapshot' que no tiene 'documentos' de obtención de instancias. Receptor: instancia de 'DocumentSnapshot' Intentó llamar: documentos - KeplerDuff 21 de septiembre a las 2:02

Hola chicos, tengo el mismo error, solo tienen que eliminar () de snapshot.data ** () ** ['nome']. ToString () = & gt; & gt; snapshot.data ['nome']. toString () así, entonces funciona.

1
IRUSU TUNES 7 oct. 2020 a las 21:26