Dart实现消息列表双条件排序:置顶消息按时间排序问题
正确的Dart消息两阶段排序实现
你之前的排序逻辑只判断了单条消息的置顶状态,没有完整对比两条消息的置顶情况,导致排序不符合预期。下面是满足需求的实现代码:
snapshot.data?.sort((a, b) { // 将null的置顶状态默认视为未置顶,可根据业务调整 final aIsPinned = a.c.messagePinned ?? false; final bIsPinned = b.c.messagePinned ?? false; // 第一阶段:区分置顶与非置顶消息,置顶的排前面 if (aIsPinned != bIsPinned) { return aIsPinned ? -1 : 1; } // 第二阶段:同状态的消息,按最后消息时间倒序排列(最新的在前) return b.c.lastMessageTime.compareTo(a.c.lastMessageTime); });
代码逻辑说明
- 先统一处理
messagePinned的null情况,默认将null视为未置顶,若你的业务中null代表其他含义,可修改?? false的默认值 - 优先对比两条消息的置顶状态:只要状态不同,置顶消息直接排在非置顶消息前面
- 当两条消息同为置顶或同为非置顶时,通过
lastMessageTime的倒序对比,让最新的消息排在同组的最前面
内容的提问来源于stack exchange,提问作者Cenk YAGMUR
相关产品推荐
相关产品推荐

