GOOGLE ADS

Montag, 11. April 2022

Wie kann ich mit Flutter auf Dokumentänderungen in Cloud Firestore lauschen?

Ich hätte gerne eine Listener-Methode, die nach Änderungen an einer Sammlung von Dokumenten sucht, wenn Änderungen auftreten.

Etwas wie:

import 'package:cloud_firestore/cloud_firestore.dart';
Future<Null> checkFocChanges() async {
Firestore.instance.runTransaction((Transaction tx) async {
CollectionReference reference = Firestore.instance.collection('planets');
reference.onSnapshot.listen((querySnapshot) {
querySnapshot.docChanges.forEach((change) {
// Do something with change
});
});
});
}

Der Fehler hier ist, dass onSnapshotnicht auf definiert ist CollectionReference.

Irgendwelche Ideen?


Lösung des Problems

Wenn Sie die cloud_firestoreDokumentation durchlesen, können Sie sehen, dass a Streamvon a Queryüber abgerufen werden kann snapshots().

Damit Sie es verstehen, werde ich Ihren Code nur ein kleines bisschen umwandeln:

CollectionReference reference = Firestore.instance.collection('planets');
reference.snapshots().listen((querySnapshot) {
querySnapshot.documentChanges.forEach((change) {
// Do something with change
});
});

Sie sollten dies auch nicht in einer Transaktion ausführen. Der Flutter-Weg, dies zu tun, verwendet eine StreamBuilder, direkt von der cloud_firestore Dart -Pub-Seite:

StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection('books').snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) return new Text('Loading...');
return new ListView(
children: snapshot.data.documents.map((DocumentSnapshot document) {
return new ListTile(
title: new Text(document['title']),
subtitle: new Text(document['author']),
);
}).toList(),
);
},
);

Wenn du mehr wissen willst, kannst du dir die Quelle anschauen, es ist gut dokumentiert, wo es nicht selbsterklärend ist.

Beachten Sie auch, dass ich zu geändert docChangeshabe documentChanges. Das sieht man in der query_snapshotDatei. Wenn Sie eine IDE wie IntelliJ oder Android Studio verwenden, ist es auch ziemlich einfach, sich durch die darin enthaltenen Dateien zu klicken.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...