Я добавляю в свое приложение простую платформу обмена сообщениями, чтобы пользователи могли общаться. Я использую Firebase Firestore для хранения информации о пользователях и всех чатах (скриншоты структуры ниже). Я уже успешно создал чат, но у меня возникли некоторые проблемы с экраном, на котором отображаются разговоры пользователя, поскольку я смог показать все доступные разговоры, но не могу отсортировать их из последнего последнего сообщения в наименее недавний.
Это упрощенная версия моего кода:
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: DatabaseService().getUserStream(uid),
builder: (context, snapshot) {
if (!snapshot.hasData)
return Scaffold(body: CircularProgressIndicator());
else {
// gets the user's info from firebase including the ID's of the chats he's in
// stream used so if anothe user starts a new chat it would show in real time
user = User.fromSnapshot(snapshot.data);
return Scaffold(
body: ListView.builder(
itemCount: user.chats.length,
itemBuilder: (BuildContext ctxt, int index) {
return StreamBuilder(
// gets chat data for every chatId contained by the user
// stream is used to update in real time last message and its time
stream: DatabaseService().getStream(user.chats[index]),
builder: (context, snapshot) {
if (!snapshot.hasData)
return Center(child: CircularProgressIndicator());
else {
Chat chat = Chat.fromSnapshot(snapshot.data);
/* ...
some processing of chat to extract 'receiver', 'lastMessage' and 'lastMessageDate'
... */
return MessageEntry(receiver, lastMessage,
lastMessageDate, chat.reference.documentID); // returns a card widget with the user's name,
//profile pic, last message in the conversation and time of the message
}
}
);
}
)
);
}
});
}
Теперь мне нужно, чтобы записи ListView появились на экране из самого последнего последнего сообщения, проблема в том, что пользовательский объект не содержит эту информацию, поэтому я не могу просто отсортировать список chatId, а затем запустить тот же код.
Мне нужно запускать StreamBuilder вне ListView.build для каждого чата и создать список объектов чата, которые затем можно отсортировать и отобразить в ListView, но я не смог найти никакого способа добиться этого.
Конечно, я открыт для любого другого решения, которое решит проблему.
Вот моя структура Firestore: