Travailler sur une application Flutter où j'utilise un FireFore Cloud Firebase pour stocker tous mes documents. Mon document a un champ startDateTime ayant un format comme celui-ci ...
Je veux récupérer tous les enregistrements dont startDateTime est supérieur ou égal à la date actuelle. Voici mon code de flottement pour ce faire ...
Firestore.instance.collection("trips")
.where("trip.createdByUID", isEqualTo: this.userDetails['id'])
.where("trip.startDateTime", isGreaterThanOrEqualTo: new DateTime.now().toString() )
.getDocuments().then((string) {
print('Firestore response111: , ${string.documents.length}');
string.documents.forEach((doc) => print("Firestore response222: ${doc.data.toString()}" ));
})
Mais ça ne fonctionne pas. Impossible de comprendre comment utiliser isGreaterThanOrEqualTo
pour que cela fonctionne.
Besoin de conseils.
Passez juste cette requête
.where("trip.startDateTime", isGreaterThanOrEqualTo: new DateTime.now())
Étant donné que Firebase convertit automatiquement l'objet Dart DateTime
en objet Timestamp Firebase. Vous devez également faire de même lorsque vous enregistrez l'objet.
Vous pouvez voir à droite si le type d'objet est horodaté.
Si cela ne fonctionne pas, vous pouvez enregistrer un autre objet sur votre création au format numérique. Ensuite, il est facile de comparer. Vous pouvez obtenir une dateTime numérique comme ceci:
new DateTime.now().millisecondsSinceEpoch
Je l'ai fait fonctionner sur iOS. Veuillez vérifier le code ci-dessous.
DateTime _now = DateTime.now();
return StreamBuilder<QuerySnapshot>(
stream: _store
.collection('rides')
.orderBy('rideDate')
.orderBy('rideType')
.where('rideDate', isGreaterThan: _now)
.snapshots(),