设置会话免打扰
Flutter IM Kit 支持按会话设置免打扰功能。设置免打扰后,该会话的新消息将不会显示本地通知提醒,但消息仍会正常接收和存储。
会话的免打扰状态会自动同步到融云服务端,并在多设备间保持一致。
设置会话免打扰状态
通过 RCKConvoProvider
可以切换单个会话的免打扰状态:
Dart
final convoProvider = Provider.of<RCKConvoProvider>(context, listen: false);
// 切换会话免打扰状态
convoProvider.blockConversation(conversationIndex);
该方法会自动判断当前会话的免打扰状态,并进行相应的切换:
- 如果会话当前为免打扰状态,则取消免打扰
- 如果会话当前为正常状态,则设置为免打扰
检查会话免打扰状态
通过会话对象的 notificationLevel
属性可以判断免打扰状态:
Dart
bool isBlocked = conversation.notificationLevel == RCIMIWPushNotificationLevel.blocked;
if (isBlocked) {
// 会话已设置免打扰
} else {
// 会话未设置免打扰
}
免打扰状态同步
免打扰设置会自动在不同设备间同步。可以通过监听器获取同步通知:
Dart
final engineProvider = Provider.of<RCKEngineProvider>(context, listen: false);
// 监听免打扰状态同步
engineProvider.engine?.onConversationNotificationLevelSynced = (synced) {
// 处理同步后的免打扰状态更新
for (var item in synced) {
print('会话 ${item.targetId} 免打扰状态已同步');
// 更新本地UI状态
}
};
UI 交互支持
长按菜单操作
在会话列表中长按会话项,可以在弹出菜单中添加免打扰选项:
Dart
PopupMenuButton<String>(
itemBuilder: (context) => [
PopupMenuItem(
value: 'mute',
child: Row(
children: [
Icon(isBlocked ? Icons.volume_up : Icons.volume_off),
SizedBox(width: 8),
Text(isBlocked ? '取消免打扰' : '免打扰'),
],
),
),
],
onSelected: (value) {
if (value == 'mute') {
convoProvider.blockConversation(index);
}
},
)
滑动操作
支持通过滑动手势快速设置免打扰:
Dart
Slidable(
endActionPane: ActionPane(
motion: ScrollMotion(),
children: [
SlidableAction(
onPressed: (context) => convoProvider.blockConversation(index),
backgroundColor: Colors.grey,
foregroundColor: Colors.white,
icon: isBlocked ? Icons.volume_up : Icons.volume_off,
label: isBlocked ? '取消免打扰' : '免打扰',
),
],
),
child: conversationItem,
)
免打扰图标显示
配置免打扰图标
通过 RCKConversationConfig
配置免打扰图标的显示样式:
Dart
RCKConversationConfig(
muteIconConfig: RCKMuteIconConfig(
icon: Icons.volume_off,
size: 16.0,
color: Colors.grey,
position: RCKMuteIconPosition.titlePrefix,
),
)
图标位置选项
免打扰图标支持多种显示位置:
位置选项 | 说明 |
---|---|
titlePrefix | 标题前方 |
titleSuffix | 标题后方 |
avatarOverlay | 头像叠加 |
messagePrefix | 消息前方 |
未读消息处理
设置免打扰的会话在有新消息时:
- 消息接收:正常接收并存储消息
- 本地通知:不显示本地通知提醒
- 未读计数:仍会更新未读消息数量
- UI 显示:显示特殊的免打扰徽章样式
Dart
RCKUnreadBadgeConfig(
showMuteBadge: true, // 显示免打扰徽章
muteBadgeColor: Colors.grey, // 免打扰徽章颜色
normalBadgeColor: Colors.red, // 正常徽章颜色
)
注意事项
状态一致性
免打扰状态的修改是异步操作,设置后需等待服务端响应确认。建议在操作完成后通过监听器或回调处理UI更新。
性能优化
免打扰状态检查在消息接收时进行,不会影响消息的正常存储和同步,只是不显示本地通知提醒。
适用范围
免打扰功能适用于所有会话类型,包括单聊、群聊和系统通知会话。