Обновление StreamBuilder новыми данными во Flutter и Firestore

Я использую StreamBuilder во Flutter, чтобы получать обновления коллекции firestore users в реальном времени. Я хочу фильтровать пользователей по возрасту.

StreamBuilder<List<User>>(
    stream: UserList(minAge, maxAge),
    builder: (context, snapshot) {
        print(snapshot.data);
    }
);

По сути, базовый запрос к хранилищу данных - это простой where запрос.

FirebaseFirestore.instance
        .collection('users')
        .where('age', isGreaterThan: minAge)
        .where('age', isLessThan: maxAge)
        .snapshots();

Каждый раз, когда пользователь изменяет значения minAge или maxAge в пользовательском интерфейсе, StreamBuilder получает эти новые параметры и обновляется. Это вызывает каждый раз новый запрос? Если да, будет ли этот запрос каждый раз извлекать все объекты из базы данных или он будет извлекать только новые объекты, а остальные из моего локального кеша?


person JustChris    schedule 25.10.2020    source источник
comment
Измените вопрос, чтобы показать, где на самом деле выполняется запрос. То, что у вас есть прямо сейчас, вообще не связано напрямую с Firestore. Он похоронен за CarList? Если да, отредактируйте вопрос, чтобы отобразить этот код.   -  person Doug Stevenson    schedule 25.10.2020
comment
Я отредактировал весь пример для лучшего понимания.   -  person JustChris    schedule 25.10.2020


Ответы (1)


Да, ваш код будет делать новый запрос каждый раз при изменении minAge или maxAge. Запрос нельзя обновить с помощью динамически меняющихся фильтров. Запрос не будет использовать кеш, если приложение не находится в автономном режиме или если вы направите запрос только в кеш (что не является хорошей идеей, если вы не знаете, что все возможные документы уже кэшированы).

person Doug Stevenson    schedule 25.10.2020