设置会话免打扰
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 | 消息前方 |