Разбивка запроса хранилища данных на страницы при прослушивании новых документов - PullRequest
0 голосов
/ 13 июля 2020

Как и у многих, у меня есть приложение с функцией чата. У меня есть StreamBuilder<QuerySnapshot>, который слушает новые сообщения чата, и ListView.builder, который их показывает. Я ищу хороший способ разбить сообщения на страницы, но ни одно из найденных мной решений не работает для меня, так как мне всегда приходится слушать новые сообщения.

Одна из вещей, которые я пробовал, была этот код , но это, похоже, не сработало, даже если автор сказал, что обновил код.

Каждое сообщение чата имеет собственный документ в коллекции, поэтому сейчас я просто получаю все документы в коллекции и упорядочить их по полю времени. Однако это работает только примерно для 20 сообщений, прежде чем производительность ухудшится, поэтому я был бы очень рад, если бы кто-нибудь мог мне с этим помочь.

1 Ответ

2 голосов
/ 13 июля 2020

Я думаю, вы показываете сообщения, отсортированные по дате создания, верно? Тогда почему бы вам не использовать дату для разбивки на страницы?

chatcollectionref.
where("creationdate", "<", enddate)
... // Add more conditions if needed
.orderBy("creationdate","desc").limit(20).get()

Начните с enddate в далеком будущем, затем обновите его до даты создания последнего полученного сообщения и просто разбейте его на страницы.

РЕДАКТИРОВАТЬ: немного подробнее ...

  1. Первый запуск запроса: enddate = new Date (2100, 1, 1), и вы получаете первые 20 сообщений и отображаете их
  2. Пользователь прокручивает вниз и достигает последнего сообщения
  3. Выполните еще раз запрос: enddate = creationdate последнего сообщения, которое вы уже получили, и вы получите 20 следующих
  4. L oop назад на 2

Хорошо работает в моем приложении чата

...