Flutter即时通讯插件sop_cometchat的使用

Flutter即时通讯插件sop_cometchat的使用

sop_cometchat

sop_cometchat 是一个用于 Flutter 的即时通讯插件项目。它提供了跨平台的即时通讯功能,支持 Android 和 iOS 平台。


使用步骤

以下是使用 sop_cometchat 插件的基本步骤:

1. 添加依赖

在项目的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  sop_cometchat: ^1.0.0

然后运行以下命令以更新依赖:

flutter pub get

2. 初始化插件

在应用启动时初始化插件。通常在 main.dart 中进行初始化。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ChatPage(),
    );
  }
}

class ChatPage extends StatefulWidget {
  [@override](/user/override)
  _ChatPageState createState() => _ChatPageState();
}

class _ChatPageState extends State<ChatPage> {
  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化插件
    CometChat.init("your_app_id", "your_region");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("CometChat 示例"),
      ),
      body: Center(
        child: Text("CometChat 已初始化!"),
      ),
    );
  }
}

3. 登录用户

在用户登录之前,需要调用 login 方法。假设我们有一个用户名和用户 ID。

Future<void> login(String uid) async {
  try {
    await CometChat.login(uid);
    print("用户登录成功!");
  } catch (e) {
    print("登录失败: $e");
  }
}

在按钮点击事件中调用登录方法:

ElevatedButton(
  onPressed: () {
    login("testUser1"); // 替换为实际的用户 ID
  },
  child: Text("登录"),
)

4. 发送消息

登录成功后,可以发送消息给其他用户或群组。

Future<void> sendMessage(String receiverUid, String messageText) async {
  try {
    CometChatMessage message = CometChatMessage(
      receiverId: receiverUid,
      messageType: CometChatMessage.RECEIVER_TYPE_USER,
      text: messageText,
    );

    CometChat.sendMessage(message).then((sentMessage) {
      print("消息已发送: ${sentMessage.text}");
    }).catchError((error) {
      print("发送消息失败: $error");
    });
  } catch (e) {
    print("发送消息失败: $e");
  }
}

在按钮点击事件中调用发送消息方法:

ElevatedButton(
  onPressed: () {
    sendMessage("testUser2", "你好,这是测试消息!");
  },
  child: Text("发送消息"),
)

5. 接收消息

为了接收消息,需要监听消息事件。

[@override](/user/override)
void initState() {
  super.initState();

  // 监听消息事件
  CometChat.addMessageListener("messageListenerId", (message) {
    print("接收到新消息: ${message.text}");
  });
}

完整示例代码

以下是完整的示例代码,展示了如何使用 sop_cometchat 插件实现基本的即时通讯功能。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ChatPage(),
    );
  }
}

class ChatPage extends StatefulWidget {
  [@override](/user/override)
  _ChatPageState createState() => _ChatPageState();
}

class _ChatPageState extends State<ChatPage> {
  final TextEditingController _controller = TextEditingController();

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化插件
    CometChat.init("your_app_id", "your_region");

    // 监听消息事件
    CometChat.addMessageListener("messageListenerId", (message) {
      print("接收到新消息: ${message.text}");
    });
  }

  Future<void> login(String uid) async {
    try {
      await CometChat.login(uid);
      print("用户登录成功!");
    } catch (e) {
      print("登录失败: $e");
    }
  }

  Future<void> sendMessage(String receiverUid, String messageText) async {
    try {
      CometChatMessage message = CometChatMessage(
        receiverId: receiverUid,
        messageType: CometChatMessage.RECEIVER_TYPE_USER,
        text: messageText,
      );

      CometChat.sendMessage(message).then((sentMessage) {
        print("消息已发送: ${sentMessage.text}");
      }).catchError((error) {
        print("发送消息失败: $error");
      });
    } catch (e) {
      print("发送消息失败: $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("CometChat 示例"),
      ),
      body: Column(
        children: [
          ElevatedButton(
            onPressed: () {
              login("testUser1"); // 替换为实际的用户 ID
            },
            child: Text("登录"),
          ),
          TextField(
            controller: _controller,
          ),
          ElevatedButton(
            onPressed: () {
              if (_controller.text.isNotEmpty) {
                sendMessage("testUser2", _controller.text); // 替换为实际的接收者 ID
                _controller.clear();
              }
            },
            child: Text("发送消息"),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


SopCometchat 是一个用于在 Flutter 应用中集成即时通讯功能的插件。它基于 CometChat SDK,提供了丰富的功能,如一对一聊天、群组聊天、语音通话、视频通话等。以下是如何在 Flutter 项目中使用 sop_cometchat 插件的详细步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 sop_cometchat 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  sop_cometchat: ^latest_version

然后运行 flutter pub get 来安装依赖。

2. 初始化 CometChat

在使用 CometChat 功能之前,需要先初始化 CometChat SDK。通常可以在 main.dart 文件中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 CometChat
  await SopCometchat.init(
    appId: "YOUR_APP_ID",
    region: "YOUR_REGION",
    authKey: "YOUR_AUTH_KEY",
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomeScreen(),
    );
  }
}

3. 用户登录

在用户登录时,需要使用 CometChat 的 login 方法:

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

class HomeScreen extends StatelessWidget {
  Future<void> loginUser() async {
    try {
      await SopCometchat.login(
        uid: "USER_UID",
        authToken: "USER_AUTH_TOKEN",
      );
      print("User logged in successfully");
    } catch (e) {
      print("Failed to login: $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("CometChat Demo"),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: loginUser,
          child: Text("Login"),
        ),
      ),
    );
  }
}

4. 启动聊天界面

SopCometchat 提供了预构建的聊天界面,可以直接使用:

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

class ChatScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Chat"),
      ),
      body: SopCometchat.chatView(
        uid: "RECEIVER_UID",
        type: "user", // 可以是 "user" 或 "group"
      ),
    );
  }
}

5. 启动语音/视频通话

SopCometchat 还支持语音和视频通话功能:

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

class CallScreen extends StatelessWidget {
  Future<void> startCall() async {
    try {
      await SopCometchat.startCall(
        receiverId: "RECEIVER_UID",
        callType: "audio", // 可以是 "audio" 或 "video"
      );
    } catch (e) {
      print("Failed to start call: $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Call"),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: startCall,
          child: Text("Start Call"),
        ),
      ),
    );
  }
}

6. 处理用户登出

在用户登出时,调用 logout 方法:

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

class LogoutScreen extends StatelessWidget {
  Future<void> logoutUser() async {
    try {
      await SopCometchat.logout();
      print("User logged out successfully");
    } catch (e) {
      print("Failed to logout: $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Logout"),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: logoutUser,
          child: Text("Logout"),
        ),
      ),
    );
  }
}
回到顶部