聊天页面
聊天页面是 IMKit 中最核心的界面之一,它展示了与特定用户或群组的消息历史记录,并提供了消息输入区域用于发送各种类型的消息。本文档将介绍如何在 Flutter 应用中使用 IMKit 的聊天页面。
页面效果
聊天页面通常包含以下元素:
- 消息列表区域,展示历史消息
- 输入区域,包含文本输入框和功能按钮
- 表情面板
- 更多功能面板(发送图片、文件等)

基本用法
- 在 Flutter 应用中使用
RCKChatPage
组件:
Dart
import 'package:flutter/material.dart';
import 'package:rongcloud_im_kit/rongcloud_im_kit.dart';
class ChatScreen extends StatelessWidget {
// 可以传入完整的会话对象
final RCIMIWConversation conversation;
ChatScreen({required this.conversation});
Widget build(BuildContext context) {
return Scaffold(
body: RCKChatPage(
conversation: conversation,
),
);
}
}
收到消息后执行自定义逻辑(接入 EngineProvider 通知)
聊天页面内置通过 RCKChatProvider
同步消息列表。若您还需要在"收到消息"时执行额外操作(如埋点、提示音或业务流程),可订阅 RCKEngineProvider.receiveMessageNotifier
:
Dart
class ChatScreen extends StatefulWidget {
final RCIMIWConversation conversation;
const ChatScreen({super.key, required this.conversation});
State<ChatScreen> createState() => _ChatScreenState();
}
class _ChatScreenState extends State<ChatScreen> {
late RCKEngineProvider _engineProvider;
late VoidCallback _onReceiveMessage;
void initState() {
super.initState();
// 延后到首帧后再读取 context
WidgetsBinding.instance.addPostFrameCallback((_) {
_engineProvider = context.read<RCKEngineProvider>();
_onReceiveMessage = () {
final msg = _engineProvider.receiveMessageNotifier.value;
if (msg == null) return;
// 在此处编写自定义逻辑(示例)
// playSound(); sendLocalAnalytics(msg); showInAppBanner(msg);
};
_engineProvider.receiveMessageNotifier.addListener(_onReceiveMessage);
});
}
void dispose() {
// 移除监听,避免内存泄漏
try {
_engineProvider.receiveMessageNotifier.removeListener(_onReceiveMessage);
} catch (_) {}
super.dispose();
}
Widget build(BuildContext context) {
return RCKChatPage(conversation: widget.conversation);
}
}
说明:
- UI 列表更新由
RCKChatProvider
自动完成;上述监听仅用于额外业务逻辑,避免重复插入消息。 - 其他可用通知:
networkChangeNotifier
(网络变更)、recallMessageNotifier
(消息被撤回)、failedMessageSentNotifier
(失败消息重发成功)、speechToTextMessageNotifier
(语音转文字完成)等,使用方式相同。
- 跳转到聊天页面:
Dart
// 从会话列表跳转到聊天页面
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => RCKChatPage(
conversation: conversation,
),
),
);
自定义 UI
请参见自定义文档入口:
大部分 Config 提供了 copyWith 方法,您可以使用它复制已有 Config,方便使用。