web-dev-qa-db-fra.com

Interroger un seul document dans Firestore dans Flutter (plug-in cloud_firestore)

Je veux récupérer les données d'un seul document via son ID. Mon approche avec des exemples de données de:

TESTID1 {
     'name': 'example', 
     'data': 'sample data',
}

était quelque chose comme ça:

Firestore.instance.document('TESTID1').get() => then(function(document) {
    print(document('name'));
}

mais cela ne semble pas être une syntaxe correcte.

Je n’étais pas en mesure de trouver aucune documentation détaillée sur l’interrogation de firestore dans Flutter (Dart) car la documentation de Firebase n’adresse que Native WEB, iOS, Android etc., mais La documentation de cloud_firestore est également bien trop courte: il n’existe qu’un exemple qui montre comment interroger plusieurs documents dans un flux qui n’est pas ce que je veux faire.

Problème lié à la documentation manquante: https://github.com/flutter/flutter/issues/14324

Il ne peut pas être si difficile d'obtenir des données à partir d'un seul document.

MISE À JOUR:

Firestore.instance.collection('COLLECTION').document('ID')
.get().then((DocumentSnapshot) =>
      print(DocumentSnapshot.data['key'].toString());
);

n'est pas exécuté.

9
blandaadrian

mais cela ne semble pas être une syntaxe correcte.

Ce n'est pas la syntaxe correcte, car il vous manque un appel collection(). Vous ne pouvez pas appeler document() directement sur votre Firestore.instance. Pour résoudre ce problème, vous devriez utiliser quelque chose comme ceci:

var document = await Firestore.instance.collection('COLLECTION_NAME').document('TESTID1');
document.get() => then(function(document) {
    print(document('name'));
}

Ou plus simplement:

var document = await Firestore.instance.document('COLLECTION_NAME/TESTID1');
document.get() => then(function(document) {
    print(document('name'));
}

Si vous souhaitez obtenir des données en temps réel, veuillez utiliser le code suivant:

Widget build(BuildContext context) {
  return new StreamBuilder(
      stream: Firestore.instance.collection('COLLECTION_NAME').document('TESTID1').snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return new Text("Loading");
        }
        var userDocument = snapshot.data;
        return new Text(userDocument["name"]);
      }
  );
}

Cela vous aidera également à attribuer le nom à une vue texte.

22
Alex Mamo