我正在创建一个聊天应用程序,如果用户连续发送多条消息,我不想一遍又一遍地显示用户头像。
用户消息存储在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;
}
}但是,这不适用于最新的消息,或者如果有两条以上的消息来自同一用户。我如何重写条件,使其按预期工作?
谢谢!
更新:
在尝试@Marcel回答并测试更多之后,我发现了另一个问题,可能导致了这个问题。
即使在发送消息2时,map[index + 1] != null也不为真。只有在发送消息3之后才为真。
我在函数中使用条件进行测试:
if (map[index + 1] != null) {
print('!=null');
}发布于 2019-03-20 22:39:55
除非您测试index > 0,否则您的代码没有理由不能用于索引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-expression是一个布尔值,所以可以直接返回它。
https://stackoverflow.com/questions/55261128
复制相似问题