Проверить последовательное значение в карте? - PullRequest
0 голосов
/ 20 марта 2019

Я создаю приложение чата и не хочу отображать аватар пользователя снова и снова, если пользователь отправляет несколько сообщений подряд.

Пользовательские сообщения хранятся в Map, где самое новое сообщение имеет индекс 0. Чтобы проверить, отправлено ли сообщение с номером index тем же лицом, что и ранее, я использую следующий метод:

bool _sameUser () {
  if (index > 0 && map != null && map[index + 1] != null && map[index + 1]['fromUser’] == map[index][‘fromUser’]) {
    return true;
  } else {
    return false;
  }
}

Однако это не работает для самого нового сообщения или если имеется более двух сообщений от одного пользователя. Как я могу переписать условное, чтобы оно работало как задумано?

Спасибо!

UPDATE:

После попытки @Marcel ответить и проверить больше, я обнаружил, что это может быть связано с другой проблемой.

map[index + 1] != null неверно, даже если сообщение 2 отправлено. Истинно только после отправки сообщения 3.

Я проверяю с условным в функции:

if (map[index + 1] != null) {
print('!=null');
}

1 Ответ

0 голосов
/ 20 марта 2019

Нет причин, по которым ваш код не должен работать для индекса 0, за исключением проверки index > 0. Убрав это, оно должно работать нормально:

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

Поскольку я предположил, что index никогда не должно быть меньше, чем 0, а map никогда не должно быть null, я переместил часть кода условия в операторы assert. Кроме того, поскольку ваше if -выражение является логическим, вы можете просто вернуть его напрямую.

...