Flutter上的Firestore查询

时间:2018-02-22 21:53:33

标签: firebase google-cloud-firestore flutter

如何在FlutterFire中使用.where()来执行Firestore的查询?因为文档和示例没有涵盖这一点我很困惑。我在这里没有找到其他问题所以我希望我不要求重复。

3 个答案:

答案 0 :(得分:22)

下面的示例遍历集合“fields”中的每个文档,并过滤“grower”。没有相关文档,但您可以查看源代码。

import 'package:cloud_firestore/cloud_firestore.dart';

Firestore.instance.collection('fields').where('grower', isEqualTo: 1)
    .snapshots().listen(
          (data) => print('grower ${data.documents[0]['name']}')
    );

来自源代码:

  Query where(
    String field, {
    dynamic isEqualTo,
    dynamic isLessThan,
    dynamic isLessThanOrEqualTo,
    dynamic isGreaterThan,
    dynamic isGreaterThanOrEqualTo,
    bool isNull,
  }) {..}

答案 1 :(得分:0)

这个,如果你使用流构建器

StreamBuilder<QuerySnapshot>(
        stream: feed.where('uid', isEqualTo: 'aaaaaaaaaaaaa').snapshots(),
        builder: (_, snapshot) {
          if (snapshot.hasData) {
            return Column(
              children: snapshot.data.docs
                  .map((e) => itemGrid(
                        e.data()['username'],
                        e.data()['uid'],
                        e.data()['uavatarUrl'],
                        e.data()['imageUrl'],
                        e.data()['desc'],
                      ))
                  .toList(),
            );
          } else {
            print('null');
            return Container();
          }
        }));

答案 2 :(得分:0)

空安全代码(Dart 2.12)

由于许多类现在已被弃用或完全删除,请将此代码用于 Flutter 2.0 及更高版本。

QuerySnapshot<Map<String, dynamic>> snapshot = await FirebaseFirestore.instance 
    .collection('employees')
    .limit(10)
    .where('age', isGreaterThan: 30)
    .get();

List<QueryDocumentSnapshot> docs = snapshot.docs;
for (var doc in docs) {
  if (doc.data() != null) {
    var data = doc.data() as Map<String, dynamic>;
    var name = data['name']; // You can get other data in this manner. 
  }
}