Flutter即时通讯插件zego_zimkit的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter即时通讯插件zego_zimkit的使用

ZIMKit(ZegoCloud In-App Chat UIKit)

ZIMKit 是 ZegoCloud 提供的一个即用型聊天 UI 套件,支持多种即时通讯功能。以下是 ZIMKit 的主要功能:

🥳 beta 支持:

  • 创建点对点聊天 / 创建群聊 / 加入群聊
  • 发送文本、图片(<10M)、GIF(<10M)、视频(<100M)、文件(<100M)
  • 长按会话列表项删除会话或退出群聊
  • 自定义 UI(请检查小部件的参数)

✨ 即将推出:

  • 邀请加入群聊 / 设置用户头像 / 设置群头像
  • 下载文件

1. 初始化 IMKit

main.dart 文件中初始化 ZIMKit:

void main() {
  ZIMKit().init(
    appID: YOUR_APP_ID, // 你的 App ID
    appSign: YOUR_APP_SIGN, // 你的 App Sign
  );
  runApp(const ZIMKitDemo());
}

2. 用户登录

创建一个按钮,用户点击后进行登录操作:

ElevatedButton(
  onPressed: () async {
    await ZIMKit()
        .connectUser(id: userID.text, name: userName.text);
    Navigator.of(context).pushReplacement(
      MaterialPageRoute(
        builder: (context) => const ZIMKitDemoHomePage(),
      ),
    );
  },
  child: const Text("登录"),
)

3. 享受聊天功能

创建一个主页,显示会话列表并导航到消息页面:

class ZIMKitDemoHomePage extends StatelessWidget {
  const ZIMKitDemoHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async => false,
      child: Scaffold(
        appBar: AppBar(title: const Text('会话')),
        body: ZIMKitConversationListView(
          onPressed: (context, conversation, defaultAction) {
            Navigator.push(context, MaterialPageRoute(
              builder: (context) {
                return ZIMKitMessageListPage(
                  conversationID: conversation.id,
                  conversationType: conversation.type,
                );
              },
            ));
          },
        ),
      ),
    );
  }
}

示例代码

以下是一个完整的示例代码,展示了如何使用 ZIMKit 进行即时通讯:

main.dart

import 'package:flutter/material.dart';
import 'package:zego_zimkit/zego_zimkit.dart';
import 'package:zego_zimkit_example/home_page.dart';

void main() {
  ZIMKit().init(
    appID: YOUR_APP_ID, // 你的 App ID
    appSign: YOUR_APP_SIGN, // 你的 App Sign
  );
  runApp(const ZIMKitDemo());
}

class ZIMKitDemo extends StatelessWidget {
  const ZIMKitDemo({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ZIMKit Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const LoginPage(),
    );
  }
}

class LoginPage extends StatefulWidget {
  const LoginPage({Key? key}) : super(key: key);

  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  final TextEditingController userIDController = TextEditingController();
  final TextEditingController userNameController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('登录')),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextField(
              controller: userIDController,
              decoration: const InputDecoration(labelText: '用户ID'),
            ),
            TextField(
              controller: userNameController,
              decoration: const InputDecoration(labelText: '用户名'),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                await ZIMKit()
                    .connectUser(id: userIDController.text, name: userNameController.text);
                Navigator.of(context).pushReplacement(
                  MaterialPageRoute(
                    builder: (context) => const ZIMKitDemoHomePage(),
                  ),
                );
              },
              child: const Text("登录"),
            ),
          ],
        ),
      ),
    );
  }
}

home_page.dart

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

class ZIMKitDemoHomePage extends StatelessWidget {
  const ZIMKitDemoHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async => false,
      child: Scaffold(
        appBar: AppBar(title: const Text('会话')),
        body: ZIMKitConversationListView(
          onPressed: (context, conversation, defaultAction) {
            Navigator.push(context, MaterialPageRoute(
              builder: (context) {
                return ZIMKitMessageListPage(
                  conversationID: conversation.id,
                  conversationType: conversation.type,
                );
              },
            ));
          },
        ),
      ),
    );
  }
}

pubspec.yaml

确保在 pubspec.yaml 文件中添加 ZIMKit 依赖:

dependencies:
  flutter:
    sdk: flutter
  zego_zimkit: ^1.0.0

通过以上步骤,你可以快速集成 ZegoCloud 的 ZIMKit 到你的 Flutter 应用中,实现即时通讯功能。希望这些信息对你有所帮助!如果有任何问题,请随时联系 ZegoCloud 的技术支持团队。


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

1 回复

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


在Flutter项目中集成并使用zego_zimkit插件以实现即时通讯功能,可以按照以下步骤进行。下面是一个基本的代码案例,展示如何初始化ZegoIM、登录、发送和接收消息。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  zego_zimkit: ^最新版本号  # 请替换为实际最新版本号

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

2. 配置Android和iOS权限

android/app/src/main/AndroidManifest.xml中添加必要的权限,例如网络权限:

<uses-permission android:name="android.permission.INTERNET"/>

对于iOS,在ios/Runner/Info.plist中添加网络权限等必要配置。

3. 初始化ZegoIM

在你的Flutter项目中创建一个服务类来管理ZegoIM的初始化、登录和消息处理。

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

class ZegoIMClient {
  static late ZegoIMClient _instance;
  late ZegoIMClientConfig _config;
  late ZegoIMClient? _client;

  ZegoIMClient._internal() {
    _config = ZegoIMClientConfig()
      ..appID = "你的AppID" // 替换为你的AppID
      ..serverList = ["你的IM服务器地址"]; // 替换为你的IM服务器地址

    _client = ZegoIMClient.createIMClient(_config);

    _client!.onLoginResult = (ZegoIMClientLoginResult result, int code, String? reason) {
      if (result == ZegoIMClientLoginResult.success) {
        print("登录成功");
      } else {
        print("登录失败: $reason");
      }
    };

    _client!.onMessageReceived = (ZegoIMClientMessage message) {
      print("收到消息: ${message.messageBody}");
    };
  }

  factory ZegoIMClient() {
    if (_instance == null) {
      _instance = ZegoIMClient._internal();
    }
    return _instance;
  }

  Future<void> login(String userID, String token) async {
    await _client!.login(userID, token);
  }

  Future<void> sendMessage(String toUserID, String content) async {
    ZegoIMClientMessage message = ZegoIMClientMessage()
      ..receiverUserID = toUserID
      ..messageBody = content
      ..msgType = ZegoIMClientMessageType.text;

    await _client!.sendMessage(message);
  }
}

4. 使用ZegoIMClient

在你的主应用中使用上述服务类进行登录和发送消息。

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late ZegoIMClient zegoIMClient;

  @override
  void initState() {
    super.initState();
    zegoIMClient = ZegoIMClient();
    zegoIMClient.login("用户ID", "用户Token").then((_) {
      // 登录成功后发送消息
      zegoIMClient.sendMessage("接收者ID", "Hello, this is a test message!");
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('ZegoIM Demo'),
        ),
        body: Center(
          child: Text('登录并发送消息中...'),
        ),
      ),
    );
  }
}

注意事项

  1. AppID和Token:你需要从Zego云通信平台获取你的AppID和生成有效的Token。
  2. 错误处理:示例代码中没有包含详细的错误处理逻辑,实际应用中应该添加适当的错误处理。
  3. UI更新:示例代码中的UI更新是简单的文本显示,实际应用中你可能需要根据消息内容更新UI组件。

这只是一个基本的示例,用于展示如何在Flutter中使用zego_zimkit插件进行即时通讯。根据你的实际需求,你可能需要扩展这个示例,添加更多的功能和优化。

回到顶部