跳到主要内容

会话置顶

会话置顶功能允许用户将重要的会话固定在会话列表的顶部,方便快速访问常用的聊天会话。本文档介绍如何在Flutter IMKit中使用会话置顶功能。

功能效果

置顶的会话会显示在会话列表的最上方,通常会有特殊的视觉标识(如背景色不同)来区分普通会话。

使用方法

设置会话置顶

通过 engine?.changeConversationTopStatu 来改变置顶状态。

Dart
// 设置会话置顶
final engineProvider = context.read<RCKEngineProvider>();
final engine = engineProvider.engine;

engine?.changeConversationTopStatus(
RCIMIWConversationType.private, // 会话类型
'user123', // 会话ID
null, // 频道ID,普通会话为null
true, // true: 置顶, false: 取消置顶
callback: IRCIMIWChangeConversationTopStatusCallback(
onConversationTopStatusChanged: (int? code) {
if (code == 0) {
// 设置成功
print('会话置顶设置成功');
} else {
// 设置失败
print('会话置顶设置失败,错误码: $code');
}
}
)
);

获取会话置顶状态

Dart
// 获取会话置顶状态
final engineProvider = context.read<RCKEngineProvider>();
final engine = engineProvider.engine;

engine?.getConversation(
RCIMIWConversationType.private, // 会话类型
'user123', // 会话ID
null, // 频道ID
callback: IRCIMIWGetConversationCallback(
onSuccess: (RCIMIWConversation? conversation) {
if (conversation != null) {
bool isTop = conversation.top ?? false;
print('会话置顶状态: $isTop');
}
},
onError: (int? code) {
// 获取失败
}
)
);

自定义会话排序规则

默认情况下,IMKit会将置顶会话显示在列表顶部,置顶会话之间按最后一条消息时间排序,非置顶会话也按最后一条消息时间排序。如果您需要自定义排序规则,可以获取会话列表后自行排序:

Dart
// 获取引擎实例
final engineProvider = context.read<RCKEngineProvider>();
final engine = engineProvider.engine;

// 获取会话列表
engine?.getConversations(
[RCIMIWConversationType.private, RCIMIWConversationType.group],
null,
0,
20,
callback: IRCIMIWGetConversationsCallback(
onSuccess: (List<RCIMIWConversation>? conversations) {
if (conversations != null) {
// 自定义排序规则
conversations.sort((a, b) {
// 首先按置顶状态排序
if ((a.top ?? false) && !(b.top ?? false)) {
return -1;
} else if (!(a.top ?? false) && (b.top ?? false)) {
return 1;
}

// 置顶状态相同,再按其他规则排序
// 例如:按未读消息数排序
if ((a.unreadCount ?? 0) > (b.unreadCount ?? 0)) {
return -1;
} else if ((a.unreadCount ?? 0) < (b.unreadCount ?? 0)) {
return 1;
}

// 最后按时间排序
return (b.lastMessage?.sentTime ?? 0).compareTo(a.lastMessage?.sentTime ?? 0);
});


// 使用排序后的会话列表
setState(() {
_conversations = conversations;
});

// 使用排序后的会话列表
setState(() {
_conversations = conversations;
});
}
},
onError: (int? code) {
// 获取失败
}
)
);

置顶状态同步

会话置顶状态会自动在多设备间同步。当用户在一个设备上设置了会话置顶,其他设备也会接收到置顶状态的更新。

监听置顶状态变化

您可以监听会话状态变化,及时更新UI:

Dart

void initState() {
super.initState();

// 获取引擎实例
final engineProvider = context.read<RCKEngineProvider>();
final engine = engineProvider.engine;

// 监听会话状态变化
engine?.onConversationTopStatusSynced =
(conversationType, targetId, channelId, isTop) {
// 监听逻辑
};
}