#firebase #flutter #google-cloud-firestore #feed #stream-builder
#firebase #трепетание #google-облако-firestore #подача #stream-builder
Вопрос:
Я пытаюсь создать что-то вроде ленты с помощью Flutter и Firebase, и я хочу упорядочивать сообщения по их значению postedAt, но проблема в том, что когда я использую collection.OrderBy(), он не работает должным образом. Он добавляет новую запись в случайное место в ленте и дает ей ссылку на изображение случайной существующей записи (или я думаю, что она просто дублирует один элемент в ленте). Я создал индексы в Firebase, я попробовал оба типа индексов, но ни один из них не работает. Странно то, что когда я добавляю новое сообщение с телефона, когда мое добавление завершено, оно просто работает нормально, но при размещении на другом телефоне оно показывает описанное поведение.
Редактировать: при горячей перезагрузке он работает правильно (последнее добавленное сообщение отображается вверху) Редактировать: когда я удалил метод OrderBy, проблема продолжалась.
StreamBuilder(
stream: FirebaseFirestore.instance
.collection("users")
.doc(FirebaseAuth.instance.currentUser.uid)
.collection("posts")
.orderBy('postedAt', descending:true)
.snapshots(),
builder: (BuildContext context,AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
if (snapshot.hasError) {
print("error:" snapshot.error.toString());
}
List<Post> posts = [];
posts = snapshot.data.docs.map((postDoc) {
return Post.fromDoc(postDoc);
}).toList();
if (posts.isEmpty) {
return Center(
child: Text("No posts"),
);
}
return ListView.builder(
cacheExtent: 4000,
itemCount: posts.length,
itemBuilder: (BuildContext context, int index) {
return PostWidget(
post: posts[index],
);
},
);
},
)
мои индексы:
Составной индекс
единый индекс
скриншот документа: документ ss
Комментарии:
1.
postedAt
— этоtimeStamp
поле?2. Можете ли вы поделиться скриншотом образца документа?
3. @Muthu Thavamani нет, это не временная метка, это целое число DateTime.now().milisecondssinceepoch
4. Я отредактировал скриншот документа
Ответ №1:
Я решил эту проблему. Я подумал, что если он дублирует элементы, то, возможно, он не может их разделить. и добавил параметр ключа PostWidget
, чтобы он работал.