You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 23:22:03