Flutter实时聊天功能插件firestore_chat的使用
Flutter实时聊天功能插件firestore_chat的使用
开始使用
要开始使用Firebase,请参阅文档:https://firebase.flutter.dev/docs/overview
在项目中添加Firestore Chat
插件,按照以下步骤操作:
import 'package:firestore_chat/firestore_chat.dart';
可以通过Material路由或直接推送聊天页面来打开聊天页面。
await openChatPage(BuildContext context, ChatEntity chatEntity);
或者
FirestoreChat().chatPageWidget(chatEntity)
示例
打开聊天
final chatEntity = ChatEntity(
onMessageSent: (message, chatEntity){
//
},
mainUser: mainUser,
peers: peers,
path: chatPath,
title: "FIFA 2022 Games",
);
//方式一
Navigator.push(
context,
FirestoreChat().chatPageWidget(chatEntity),
);
//方式二
await openChatPage(context, chatEntity);
...
模型
Peer User
字段
id
- 用户IDimage
- 用户头像URLname
- 用户显示名称
Chat Entity
字段
mainUser
- 登录用户peers
- 用户映射表<user ID, PeerUser>
title
- 聊天名称(可以为nullable
)path
- 在Firestore中存储消息/聊天的位置onMessageSent
- 当消息保存到Firestore时的回调
许可证
问题与反馈
如果您有任何建议或发现任何问题,请随时在Github上提交问题进行讨论。
示例代码
// 忽略不必要的const
import 'package:firestore_chat/firestore_chat.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'firebase_options.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 这个小部件是你的应用的根。
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: const [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
DefaultCupertinoLocalizations.delegate,
],
supportedLocales: const [
Locale('en', ''), // 英语
Locale('ar', ''), // 阿拉伯语
],
locale: const Locale('ar'), // 设置初始语言为阿拉伯语
title: 'Firestore Chat Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
// Center 是一个布局小部件。它只接受一个子元素并将其置于父元素的中心。
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () => openChatFirst(context),
child: const Text("Open Chat"),
),
const SizedBox(height: 50),
ElevatedButton(
onPressed: () => openChatSecond(context),
child: const Text("Open Chat"),
),
],
),
),
// 这个逗号使得自动格式化更美观。
);
}
// 直接方法调用打开聊天
openChatFirst(context) async {
final mainUser = PeerUser(id: "1", name: "User 1");
final peers = {
"1": mainUser,
"2": PeerUser(id: "2", name: "User 2"),
"3": PeerUser(id: "3", name: "User 3"),
"4": PeerUser(id: "4", name: "User 4"),
"5": PeerUser(id: "5", name: "User 5"),
};
final chatEntity = ChatEntity(
mainUser: mainUser,
peers: peers,
path: "sport/football/2022/worldcup-1",
title: "FIFA 2022 Games - Photo Sharing - 1",
supportMedia: true,
onMessageSent: (String message, ChatEntity chatEntity) {
// 处理当聊天已发送到Firestore时的情况
// 您可以使用它来发送通知或显示一个Toast/SnackBar
},
);
await FirestoreChat().openChatPage(context, chatEntity);
}
// 通过导航路由打开聊天
openChatSecond(context) async {
final mainUser = PeerUser(id: "1", name: "User 1");
final peers = {
"1": mainUser,
"2": PeerUser(id: "2", name: "User 2"),
"3": PeerUser(id: "3", name: "User 3"),
"4": PeerUser(id: "4", name: "User 4"),
"5": PeerUser(id: "5", name: "User 5"),
};
final chatEntity = ChatEntity(
mainUser: mainUser,
peers: peers,
path: "sport/football/2022/worldcup",
title: "FIFA 2022 Games",
onMessageSent: (String message, ChatEntity chatEntity) {
// 处理当聊天已发送到Firestore时的情况
// 您可以使用它来发送通知或显示一个Toast/SnackBar
},
);
Navigator.push(
context,
FirestoreChat().chatPageWidget(chatEntity),
);
}
}
更多关于Flutter实时聊天功能插件firestore_chat的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter实时聊天功能插件firestore_chat的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个使用 firestore_chat
插件在 Flutter 中实现实时聊天功能的代码示例。firestore_chat
是一个基于 Firebase Firestore 的聊天插件,它简化了在 Flutter 应用中实现实时聊天功能的复杂性。
首先,确保你已经在你的 Flutter 项目中添加了 firestore_chat
依赖。在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
firestore_chat: ^最新版本号 # 请替换为最新版本号
然后运行 flutter pub get
来获取依赖。
接下来,你需要设置 Firebase Firestore 数据库。确保你已经在 Firebase 控制台中创建了一个项目,并启用了 Firestore 数据库。然后,将你的 Firebase 配置添加到 Flutter 项目中,通常是在 lib/main.dart
文件的顶部:
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:firestore_chat/firestore_chat.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
现在,我们可以开始构建聊天界面。以下是一个基本的聊天应用示例:
import 'package:flutter/material.dart';
import 'package:firestore_chat/firestore_chat.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Chat App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: ChatScreen(),
);
}
}
class ChatScreen extends StatefulWidget {
@override
_ChatScreenState createState() => _ChatScreenState();
}
class _ChatScreenState extends State<ChatScreen> {
final ChatController _chatController = ChatController(
user: User(
uid: '用户的UID', // 替换为用户的唯一标识符
name: '用户名', // 替换为用户的显示名称
avatarUrl: '用户的头像URL', // 替换为用户的头像URL
),
roomId: '聊天室ID', // 替换为特定的聊天室ID
onNewMessage: (Message message) {
// 处理新消息的逻辑,例如更新UI
print('New message: ${message.text}');
},
);
@override
void dispose() {
_chatController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('聊天室'),
),
body: ChatRoom(
controller: _chatController,
),
floatingActionButton: FloatingActionButton(
onPressed: () async {
final String text = await showDialog<String>(
context: context,
builder: (context) => AlertDialog(
title: Text('发送消息'),
content: TextField(
autofocus: true,
decoration: InputDecoration(border: InputBorder.none),
onEditingComplete: () {
Navigator.of(context).pop(controller.text);
},
),
actions: <Widget>[
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text('取消'),
),
TextButton(
onPressed: () {
Navigator.of(context).pop(controller.text);
},
child: Text('发送'),
),
],
),
);
if (text != null && text.trim().isNotEmpty) {
_chatController.sendMessage(text);
}
},
tooltip: '发送消息',
child: Icon(Icons.send),
),
);
}
}
在这个示例中,我们创建了一个基本的聊天屏幕,其中包含了聊天室界面和一个浮动操作按钮用于发送消息。ChatController
被用来管理聊天逻辑,包括用户信息、聊天室ID以及新消息的回调。
请确保替换示例代码中的 '用户的UID'
、'用户名'
、'用户的头像URL'
和 '聊天室ID'
为实际的值。
这个示例展示了如何使用 firestore_chat
插件快速搭建一个基本的实时聊天功能。根据你的需求,你可以进一步自定义和扩展这个聊天界面。