Я заставляю приложение случайного чата использовать FirestoreAnimatedList (FirebaseAnimatedList для Firestore).
Я хочу показывать аватар пользователя только один раз, если один и тот же пользователь отправляет много сообщений, чтобы один и тот же аватар не отображался много раз.
Мое решение - использовать индекс для проверки того, отправлено ли последнее сообщение одним и тем же пользователем.
Поэтому мне нужна проверка, например:
if (snapshot[index - 1][‘user’] == user) {
return true;
}
Но мой snapshot - это DocumentSnapshot, поэтому я не могу вызвать [index - 1].
Может быть, я должен получить список от query?
Как получить доступ, чтобы можно было звонить index по списку и query вот так?
Спасибо!
Вот пример:
body: FirestoreAnimatedList(
query: firestore.collection('messages').snapshots(),
itemBuilder: (
BuildContext context,
DocumentSnapshot snapshot,
Animation<double> animation,
int index,
) {
return FadeTransition(
opacity: animation,
child: MessageItem(
index: index,
document: snapshot,
onTap: _removeMessage,
),
);
},

Вы можете просто хранить пользователей в Map.
В вашем виджете class вам нужно будет создать переменную для хранения карты:
final Map<int, dynamic> users = {};
Затем вы можете заполнить карту в обратном вызове itemBuilder:
itemBuilder: (
BuildContext context,
DocumentSnapshot snapshot,
Animation<double> animation,
int index,
) {
users[index] = snapshot['user']; // added line
return FadeTransition(
opacity: animation,
child: MessageItem(
index: index,
document: snapshot,
onTap: _removeMessage,
),
);
},
Теперь вы можете делать то, что хотели:
if (users[index - 1] == user) {
return true;
}
@FlutterFirebase Это очень просто Map. Вы этого не заметите ни в памяти, ни в другом исполнении. Вы не должны использовать этот готовый плагин, если хотите иметь возможность настройки. Единственное, о чем вы должны беспокоиться при использовании этого Map, это когда его очищать, однако я не могу сказать вам, как это сделать, потому что я не знаю, как работает ваше приложение.
Спасибо! Так что никак нельзя получить исходный список от query? Может быть, лучше я использую listviewbuilder
Спасибо за ответ! Я думал об этом, но это не эффективно? Это создаст еще одну пользовательскую карту из
DocumentSnapshot. Но приложение уже получает всеDocumentSnapshotвquery. Так дублировать