Использование startAt из Firebase с временными метками Flutter

#firebase #dart #flutter #google-cloud-firestore

#firebase #dart #flutter #google-облако-firestore

Вопрос:

Я сохраняю некоторые записи в Firestore со свойством timestamp, а затем запрашиваю эти записи, упорядоченные по временной метке. Я пытаюсь создать функцию «loadMore», которая затем работает, когда пользователь прокручивает страницу вниз и загружает больше сообщений.

Я сохраняю записи таким образом:

 Firestore.instance
  .collection('posts')
  .add(<String, dynamic> {
     'content': 'content,
     'likes': 0,
     'comments': 0,
     'timestamp': DateTime.now(),
   })
  

И попытка выполнить запрос таким образом:

 Firestore.instance
  .collection('posts')
  .orderBy('timestamp', descending: true)
  .startAfter(
    []..add(posts.last.timestamp)
  )
  ..limit(5)
  

Но он продолжает игнорировать «startAfter» и возвращает мне список, начинающийся с первого элемента коллекции, а не со следующих.

Хотелось бы получить помощь в использовании этого типа запросов 🙂

Ответ №1:

Преобразуйте DateTime в дату-время Unix

 'timestamp': DateTime.now().toUtc().millisecondsSinceEpoch
  

Комментарии:

1. Это сработало. Я бы предпочел использовать формат DateTime для более удобного просмотра данных в базе данных, но пока я могу смириться с этим. Для извлечения данных я использую: DateTime.fromMillisecondsSinceEpoch(doc.data['timestamp'], isUtc: true),

2. Firebase и Firestore используют формат даты и времени unix (миллисекунды с момента epoch), клиент Firebase не может знать, когда конвертировать, поэтому вам придется позаботиться о себе. Ваш код для извлечения выглядит хорошо.