Запрос Flutter Cloud FireStore с использованием нескольких условных выражений where - PullRequest
0 голосов
/ 29 июня 2019

Я боролся с правильным способом выполнения запроса с несколькими условными запросами на основе некоторых критериев, которые могут быть или не быть добавлены.Я пробовал несколько способов, но это не работает.

Future<QuerySnapshot> searchStuff(StuffModel stuff) async {

    CollectionReference col = _firestore.collection(Constants.stuffCollection);

    Query query = col.where('uid', isEqualTo: stuff.uid);

    if (stuff.who != null) {
      query = query.where('who', isEqualTo: stuff.who);
    }
    if (stuff.what != null) {
      query = query.where('what', isEqualTo: stuff.what);
    }
    if (stuff.where != null) {
      query = query.where('where', isEqualTo: stuff.where);
    }
    if (stuff.when != null) {
      query = query.where('when', isEqualTo: Timestamp.fromDate(stuff.when));
    }

    return await query.getDocuments();
  }

1 Ответ

0 голосов
/ 01 июля 2019

После добавления дополнительной оценки для непустых значений для каждого условия код теперь выглядит следующим образом и работает нормально:

Future<QuerySnapshot> searchStuff(StuffModel stuff) async {

    CollectionReference col = _firestore.collection(Constants.stuffCollection);

    Query query = col.where('uid', isEqualTo: stuff.uid);

    if (stuff.who != null && stuff.who.isNotEmpty) {
      query = query.where('who', isEqualTo: stuff.who);
    }
    if (stuff.what != null && stuff.what.isNotEmpty) {
      query = query.where('what', isEqualTo: stuff.what);
    }
    if (stuff.where != null && stuff.where.isNotEmpty) {
      query = query.where('where', isEqualTo: stuff.where);
    }
    if (stuff.when != null) {
      query = query.where('when', isEqualTo: Timestamp.fromDate(stuff.when));
    }
    return await query.getDocuments();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...