Flutter即时通讯插件easychat的使用

Flutter即时通讯插件easychat的使用

easychat 插件提供了构建聊天应用所需的一切。使用此插件,您可以轻松地为现有的应用添加一个功能齐全且美观的聊天功能。

功能列表

  • 仅验证用户可见:支持 verifiedUserOnly
  • 密码支持:支持密码保护。
  • 性别限制:仅允许男性或女性加入。
  • 聊天室定制:每个用户可以:
    • 将聊天室置顶。
    • 更改聊天室标题颜色以突出优先级。
    • 当聊天室名称或照片未正确设置或对方用户名未正确设置时更改聊天室名称。
  • 主管理员邀请:支持主管理员邀请其他用户作为管理员。
  • 可选的聊天室邀请:支持直接邀请用户,无需邀请。
  • 聊天好友收藏:显示收藏的聊天好友,并在水平轮播视图中展示。
  • 示例:创建功能齐全的聊天示例。

为什么选择实时数据库

为了更好地理解 easychat 的历史:

  • 我们四年前使用 Firestore 构建了这个插件。此后我们一直在更新这个插件作为 fireflutter 包的一部分。

  • 最近在2024年,我们决定使用实时数据库,因为用 Firestore 构建的包成本较高,不适合大型应用。

  • 因此,我们在 fireflutter 版本 4.x.x 中使用了实时数据库。

    • 实时数据库更便宜,
    • 简单,
    • 快速。
  • 稍后在2024年中期,我们发现开发者更倾向于使用 Firestore 而不是实时数据库。为了便于开发人员,我们将聊天室信息放在了 Firestore 中,而聊天消息仍然保留在实时数据库中。我们将其命名为 easychat,版本为 0.0.x

    • 我们很快意识到,保持数据安全没有简单的解决方案。
    • 聊天室用户信息在 Firestore 中,而聊天消息在实时数据库中。为了确保聊天消息的安全,聊天室用户的列表必须在实时数据库中,但它们位于 Firestore 中。
      • 我们考虑过一些解决方案;
        • 创建云函数将用户列表从 Firestore 镜像到实时数据库并不是理想的选择,因为它给开发者带来了负担(1)需要安装云函数;即使我们可以将其做成 Firebase 扩展,它仍然是额外的工作。(2)反应速度较慢,当用户进入聊天室时,用户列表无法快速从 Firestore 镜像到实时数据库。
        • 安全规则调整;
          • 我们发现了一些可能的场景来通过调整安全规则和客户端代码使其工作,但这并不简单和干净。我们从实时数据库转移到 Firestore 的原因之一是为了让其他开发者更容易上手。而调整安全规则会使逻辑变得更加复杂。
  • 因此,我们再次回到实时数据库,以使其更快且更具可扩展性。在成本可扩展性方面,实时数据库是最好的选择。

示例代码

以下是一个完整的示例代码,展示了如何使用 easychat 插件来实现一个简单的聊天功能。

// 导入必要的库
import 'package:example/screens/home/home.screen.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:easy_locale/easy_locale.dart';
import 'package:easychat/easychat.dart';

void main() async {
  // 确保Flutter绑定已初始化
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化本地化
  lo.init();
  // 初始化Firebase
  await Firebase.initializeApp(
      // options: DefaultFirebaseOptions.currentPlatform,
      );
  // 运行应用
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化聊天服务
    ChatService.instance.init();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 返回MaterialApp,首页为HomeScreen
    return const MaterialApp(
      home: HomeScreen(),
    );
  }
}

更多关于Flutter即时通讯插件easychat的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter即时通讯插件easychat的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


EasyChat 是一个用于在 Flutter 应用程序中实现即时通讯功能的插件。它提供了一个简单易用的 API,帮助开发者快速集成聊天功能。以下是使用 EasyChat 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 easychat 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  easychat: ^1.0.0  # 请根据实际情况使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化 EasyChat

在你的 Flutter 应用程序中,首先需要初始化 EasyChat。通常,你可以在 main.dart 文件中进行初始化:

import 'package:easychat/easychat.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 EasyChat
  EasyChat.initialize(
    appId: 'your_app_id',  // 你的应用ID
    apiKey: 'your_api_key',  // 你的API Key
  );
  
  runApp(MyApp());
}

3. 创建聊天界面

EasyChat 提供了一个预设的聊天界面,你可以直接使用它来显示聊天消息。你可以在你的应用中创建一个新的 StatelessWidgetStatefulWidget 来展示聊天界面。

import 'package:flutter/material.dart';
import 'package:easychat/easychat.dart';

class ChatScreen extends StatelessWidget {
  final String userId;
  final String targetUserId;

  ChatScreen({required this.userId, required this.targetUserId});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chat with $targetUserId'),
      ),
      body: EasyChatView(
        userId: userId,
        targetUserId: targetUserId,
      ),
    );
  }
}

在这个例子中,EasyChatViewEasyChat 提供的一个预设的聊天界面组件。你需要传入当前用户的 userId 和聊天目标的 targetUserId

4. 发送和接收消息

EasyChatView 组件会自动处理消息的发送和接收。你可以通过 EasyChat 提供的 API 来发送消息:

EasyChat.sendMessage(
  userId: userId,
  targetUserId: targetUserId,
  message: 'Hello, how are you?',
);

接收消息是自动处理的,所有的消息都会在 EasyChatView 中显示。

5. 处理消息事件(可选)

如果你需要处理消息的发送和接收事件,可以监听相关的事件:

EasyChat.onMessageReceived.listen((message) {
  print('Received message: $message');
});

EasyChat.onMessageSent.listen((message) {
  print('Message sent: $message');
});

6. 用户认证(可选)

如果你的应用需要用户认证,可以使用 EasyChat 提供的用户认证功能:

EasyChat.authenticateUser(
  userId: userId,
  userToken: 'your_user_token',
);

7. 其他功能

EasyChat 还提供了其他一些功能,例如:

  • 消息历史记录查询
  • 消息删除
  • 用户在线状态管理

你可以根据需要查阅 EasyChat 的官方文档来了解更多细节。

8. 示例代码

以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:easychat/easychat.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  EasyChat.initialize(
    appId: 'your_app_id',
    apiKey: 'your_api_key',
  );
  
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ChatScreen(
        userId: 'user_123',
        targetUserId: 'user_456',
      ),
    );
  }
}

class ChatScreen extends StatelessWidget {
  final String userId;
  final String targetUserId;

  ChatScreen({required this.userId, required this.targetUserId});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chat with $targetUserId'),
      ),
      body: EasyChatView(
        userId: userId,
        targetUserId: targetUserId,
      ),
    );
  }
}
回到顶部