web-dev-qa-db-fra.com

Comment récupérer des enregistrements en comparant avec la date dans le plugin flutter cloud firestore?

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 ...

enter image description here

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.

8
Suresh

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.

enter image description here

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

8
Tree

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(),
0
Nicolas El-Hage