Фильтровать результаты потока Firestore - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть список мест, которые я хочу отобразить на карте, а также отфильтровать по категории. Я могу получить местоположения и маркеры мест, но не знаю, как их отфильтровать, например, если выбран вариант из раскрывающегося списка.

Это то, что у меня есть:

  getActiveLocations() {
    Stream<List<LocationModel>> locations =
        _locationController.getActiveLocations();

    locations.listen((location) async {
      print(location);
      for (var i = 0; i < location.length; i++) {
        String name = location[i].name;
        double lat = location[i].geometry['location']['lat'];
        double lng = location[i].geometry['location']['lng'];
        String icon = location[i].icon;

        final http.Response response = await http.get(icon);

        _markers.add(
          Marker(
            icon: BitmapDescriptor.fromBytes(response.bodyBytes),
            markerId: MarkerId(name),
            position: LatLng(lat, lng),
            onTap: () => _showModalSheet(location[i]),
          ),
        );
      }
    });
  }

  Stream<List<LocationModel>> getActiveLocations() {
    final CollectionReference ref = _db.collection('locations');

    try {
      return ref.snapshots().map(
            (QuerySnapshot list) => list.documents
                .map((DocumentSnapshot doc) => LocationModel.fromFirestore(doc))
                .toList(),
          );
    } catch (err) {
      print(err);
    }
    return null;
  }

Единственное, о чем я могу думать, это установить значение состояния onTap, а затем добавить к _markers, только если местоположение содержит значение.

1 Ответ

0 голосов
/ 18 апреля 2020

Я думаю, что вы можете отфильтровать информацию из Firestore напрямую. Например, если кто-то что-то выбирает в раскрывающемся меню, вы можете получить этот параметр и использовать этот выбор для фильтрации результатов, используя запрос в Firestore, как указано здесь .

Вот пример кода они используют там:

Firestore.instance.collection('collection')
  .where('field', isEqualTo: 'value')
  .orderBy('field')
  .snapshots()
  .listen((QuerySnapshot querySnapshot){
    querySnapshot.documents.forEach((document) => print(document));
  }
);

Где field, над которым porperty , который вы собираетесь запросить value это выборка, которая была получена из выпадающий список.

Надеюсь, это поможет вам:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...