Как проверить последовательное сообщение чата? - PullRequest
0 голосов
/ 21 марта 2019

Я использую приложение случайного чата FirestoreAnimatedList (FirebaseAnimatedList для Firestore).

Мне нужно реализовать: Если user1 отправляет много последовательных сообщений, для каждого сообщения не отображается аватар пользователя.Отображать только один раз рядом с последним сообщением.Но если другой пользователь отправит сообщение, то в следующий раз, когда пользователь отправит сообщение, снова отобразится аватар.

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

class MainState extends State<Main> {
…

final Map<int, dynamic> map = {};

body: FirestoreAnimatedList(
        query: firestore.collection('messages').snapshots(),
        itemBuilder: (
          BuildContext context,
          DocumentSnapshot snapshot,
          Animation<double> animation,
          int index,
        ) {

    map[index] = snapshot;

          return FadeTransition(
            opacity: animation,
            child: MessageItem(
              index: index,
              document: snapshot,
              map: map,
            ),
          );
        },


class MessageItem extends StatelessWidget {

…

@override
  Widget build(BuildContext context) {
      return Container(
        child: new Row(
          children: <Widget>[
            new Container(
              child:

    _sameUser() ?
 new Icon(
      Icons.account_circle
    )
        : Container()

bool _sameUser () {
  assert(index >= 0);
  assert(map != null);
  return map[index + 1] != null && map[index + 1]['fromUser'] == map[index]['fromUser'];
}

Из моего теста проблема появляется только для первого и второго последовательных сообщений.Для> 2 последовательных кодов сообщений действуйте как ожидается: рядом с сообщением нет аватара.(Но проблема начинается снова, когда разрывается последовательная цепочка: например, другое user2 отправляет сообщение. Затем проблема начинается снова для последовательного сообщения user1)

Кто-нибудь поможет?Спасибо!

...