web-dev-qa-db-ja.com

Flutter Cloud Firestoreプラグインの日付と比較してレコードをフェッチする方法は?

すべてのドキュメントを保存するためにfirebase cloud firestoreを使用しているフラッターアプリケーションに取り組んでいます。私のドキュメントには、次のような形式のstartDateTimeフィールドがあります...

enter image description here

StartDateTimeが現在の日付以上のすべてのレコードをフェッチしたい。これがこれを行うための私のばたコードです...

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()}" ));
    })

しかし、これは機能していません。 isGreaterThanOrEqualToの使用方法が理解できないため、機能しません。

いくつかのガイダンスが必要です。

8
Suresh

このクエリだけを渡します

.where("trip.startDateTime", isGreaterThanOrEqualTo: new DateTime.now())

FirebaseはDart DateTimeオブジェクトをTimestamp Firebaseオブジェクトに自動的に変換するため。オブジェクトを保存するときも同じようにする必要があります。

enter image description here

オブジェクトタイプがタイムスタンプである場合は、右側に表示されます。

これが機能しない場合は、作成時に別のオブジェクトを数値形式で保存できます。次に、比較するのは簡単です。次のような数値のdateTimeを取得できます。

new DateTime.now().millisecondsSinceEpoch

8
Tree

私はそれをiOSで動作させました。以下のコードを確認してください。

DateTime _now = DateTime.now();

return StreamBuilder<QuerySnapshot>(
  stream: _store
      .collection('rides')
      .orderBy('rideDate')
      .orderBy('rideType')
      .where('rideDate', isGreaterThan: _now)
      .snapshots(),
0
Nicolas El-Hage