Flutter聊天消息管理插件chat_message_c3的使用
Flutter聊天消息管理插件chat_message_c3的使用
本文将详细介绍如何使用Flutter聊天消息管理插件chat_message_c3
。通过本教程,您可以快速上手并掌握该插件的基本功能。
Features
chat_message_c3
插件提供了以下主要功能:
- 管理聊天消息列表。
- 支持加载更多历史消息。
- 自定义消息样式。
- 消息点击和长按事件处理。
Getting Started
在开始使用之前,请确保您的项目已安装chat_message_c3
插件。可以通过pubspec.yaml
文件添加依赖:
dependencies:
chat_message_c3: ^版本号
然后运行以下命令以获取最新版本:
flutter pub get
Usage
以下是使用chat_message_c3
插件的完整示例代码。
示例代码说明
我们将创建一个简单的聊天界面,包含以下功能:
- 初始化聊天消息列表。
- 发送新消息。
- 加载更多历史消息。
- 自定义消息样式。
完整代码示例
import 'package:chat_message_c3/core/chat_controller.dart';
import 'package:chat_message_c3/models/message_model.dart';
import 'package:chat_message_c3/widget/chat_list_widget.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'ChatMessage Example'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int count = 0;
final List<MessageModel> _messageList = [
MessageModel(
ownerType: OwnerType.receiver,
content: 'ChatGPT是由OpenAI开发出的智能聊天机器人程序',
createAt: 1772058683000,
id: 2,
avatar: 'https://o.devio.org/images/o_as/avatar/tx2.jpeg',
ownerName: 'ChatGPT',
),
MessageModel(
ownerType: OwnerType.receiver,
content: '介绍一下ChatGPT',
createAt: 1771058683000,
id: 1,
avatar: 'https://o.devio.org/images/o_as/avatar/tx18.jpeg',
ownerName: 'Imooc',
)
];
late ChatController chatController;
@override
void initState() {
super.initState();
chatController = ChatController(
initialMessageList: _messageList,
scrollController: ScrollController(),
timePellet: 60,
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Column(
children: [
Expanded(
child: ChatList(
chatController: chatController,
onBubbleTap: (MessageModel message, BuildContext context) {
debugPrint('onBubbleTap: ${message.content}');
},
onBubbleLongPress: (MessageModel message, BuildContext context) {
debugPrint('onBubbleLongPress: ${message.content}');
},
),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
ElevatedButton(
onPressed: _loadMore,
child: const Text('加载更多'),
),
ElevatedButton(
onPressed: _send,
child: const Text('发送'),
),
],
),
const SizedBox(height: 20),
],
),
);
}
void _send() {
chatController.addMessage(
MessageModel(
ownerType: OwnerType.sender,
content: 'Hello ${count++}',
createAt: DateTime.now().millisecondsSinceEpoch,
avatar: 'https://o.devio.org/images/o_as/avatar/tx2.jpeg',
ownerName: 'Imooc',
),
);
Future.delayed(
const Duration(milliseconds: 2000),
() {
chatController.addMessage(
MessageModel(
ownerType: OwnerType.receiver,
content: 'Nice',
createAt: DateTime.now().millisecondsSinceEpoch,
avatar: 'https://o.devio.org/images/o_as/avatar/tx2.jpeg',
ownerName: 'ChatGPT',
),
);
},
);
}
int _counter = 0;
void _loadMore() {
var tl = 1772058683000;
tl = tl - ++_counter * 1000000;
final List<MessageModel> messageList = [
MessageModel(
ownerType: OwnerType.sender,
content: 'Hello ${_counter++}',
createAt: DateTime.now().millisecondsSinceEpoch,
avatar: 'https://o.devio.org/images/o_as/avatar/tx2.jpeg',
ownerName: 'Imooc',
),
MessageModel(
ownerType: OwnerType.receiver,
content: 'Nice',
createAt: DateTime.now().millisecondsSinceEpoch,
avatar: 'https://o.devio.org/images/o_as/avatar/tx2.jpeg',
ownerName: 'ChatGPT',
),
];
chatController.loadMoreData(messageList);
}
}
代码详解
1. 初始化聊天控制器
late ChatController chatController;
@override
void initState() {
super.initState();
chatController = ChatController(
initialMessageList: _messageList,
scrollController: ScrollController(),
timePellet: 60,
);
}
ChatController
是核心类,用于管理聊天消息列表。initialMessageList
:初始化消息列表。scrollController
:控制滚动行为。timePellet
:时间戳间隔(单位为秒)。
2. 聊天列表渲染
Expanded(
child: ChatList(
chatController: chatController,
onBubbleTap: (MessageModel message, BuildContext context) {
debugPrint('onBubbleTap: ${message.content}');
},
onBubbleLongPress: (MessageModel message, BuildContext context) {
debugPrint('onBubbleLongPress: ${message.content}');
},
),
)
ChatList
是聊天消息列表的组件。onBubbleTap
和onBubbleLongPress
分别处理消息点击和长按事件。
3. 发送消息
ElevatedButton(
onPressed: _send,
child: const Text('发送'),
)
void _send() {
chatController.addMessage(
MessageModel(
ownerType: OwnerType.sender,
content: 'Hello ${count++}',
createAt: DateTime.now().millisecondsSinceEpoch,
avatar: 'https://o.devio.org/images/o_as/avatar/tx2.jpeg',
ownerName: 'Imooc',
),
);
Future.delayed(
const Duration(milliseconds: 2000),
() {
chatController.addMessage(
MessageModel(
ownerType: OwnerType.receiver,
content: 'Nice',
createAt: DateTime.now().millisecondsSinceEpoch,
avatar: 'https://o.devio.org/images/o_as/avatar/tx2.jpeg',
ownerName: 'ChatGPT',
),
);
},
);
}
- 使用
addMessage
方法向消息列表中添加新的消息。 - 支持发送者和接收者的消息类型。
4. 加载更多历史消息
ElevatedButton(
onPressed: _loadMore,
child: const Text('加载更多'),
)
void _loadMore() {
var tl = 1772058683000;
tl = tl - ++_counter * 1000000;
final List<MessageModel> messageList = [
MessageModel(
ownerType: OwnerType.sender,
content: 'Hello ${_counter++}',
createAt: DateTime.now().millisecondsSinceEpoch,
avatar: 'https://o.devio.org/images/o_as/avatar/tx2.jpeg',
ownerName: 'Imooc',
),
MessageModel(
ownerType: OwnerType.receiver,
content: 'Nice',
createAt: DateTime.now().millisecondsSinceEpoch,
avatar: 'https://o.devio.org/images/o_as/avatar/tx2.jpeg',
ownerName: 'ChatGPT',
),
];
chatController.loadMoreData(messageList);
}
更多关于Flutter聊天消息管理插件chat_message_c3的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复