[FIXED] Abfrage eines einzelnen Dokuments von Firestore in Flutter (cloud_firestore Plugin)

Ausgabe

Bearbeiten: Diese Frage ist veraltet, und ich bin sicher, dass ab sofort neue Dokumentationen und neuere Antworten verfügbar sind.

Ich möchte Daten von nur einem einzelnen Dokument über seine ID abrufen. Mein Ansatz mit Beispieldaten von:

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

war sowas:

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

aber das scheint keine korrekte Syntax zu sein.

Ich konnte keine detaillierte Dokumentation zum Abfragen von Firestore in Flutter (Dart) finden, da die Firebase-Dokumentation nur Native WEB, iOS, Android usw. anspricht, aber nicht Flutter. Die Dokumentation von cloud_firestore ist auch viel zu kurz. Es gibt nur ein Beispiel, das zeigt, wie mehrere Dokumente in einen Stream abgefragt werden, was nicht das ist, was ich tun möchte.

Verwandtes Problem zu fehlender Dokumentation:
https://github.com/flutter/flutter/issues/14324

Es kann nicht so schwer sein, Daten aus einem einzelnen Dokument zu erhalten.

AKTUALISIEREN:

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

wird nicht ausgeführt.

Lösung

Null-Safe-Code (empfohlen)

Sie können das Dokument entweder in einer Funktion (z. B. auf Knopfdruck) oder in einem Widget (z. B. einem ) abfragen FutureBuilder.

  • In einer Methode: (einmal zuhören)

    var collection = FirebaseFirestore.instance.collection('users');
    var docSnapshot = await collection.doc('doc_id').get();
    if (docSnapshot.exists) {
      Map<String, dynamic>? data = docSnapshot.data();
      var value = data?['some_field']; // <-- The value you want to retrieve. 
      // Call setState if needed.
    }
    
  • In einemFutureBuilder (einmaliges Anhören)

    FutureBuilder<DocumentSnapshot<Map<String, dynamic>>>(
      future: collection.doc('doc_id').get(),
      builder: (_, snapshot) {
        if (snapshot.hasError) return Text ('Error = ${snapshot.error}');
    
        if (snapshot.hasData) {
          var data = snapshot.data!.data();
          var value = data!['some_field']; // <-- Your value
          return Text('Value = $value');
        }
    
        return Center(child: CircularProgressIndicator());
      },
    )
    
  • In a StreamBuilder: (hört immer zu)

    StreamBuilder<DocumentSnapshot<Map<String, dynamic>>>(
      stream: collection.doc('doc_id').snapshots(),
      builder: (_, snapshot) {
        if (snapshot.hasError) return Text('Error = ${snapshot.error}');
    
        if (snapshot.hasData) {
          var output = snapshot.data!.data();
          var value = output!['some_field']; // <-- Your value
          return Text('Value = $value');
        }
    
        return Center(child: CircularProgressIndicator());
      },
    )
    


Beantwortet von –
CopsOnRoad


Antwort geprüft von –
Marilyn (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like