Flutter即时通讯插件light_im_sdk的使用

Flutter即时通讯插件light_im_sdk的使用

在本教程中,我们将介绍如何使用 light_im_sdk 插件来实现一个简单的即时通讯应用。我们将通过一个完整的示例代码来演示如何初始化 SDK、登录用户以及发送消息。

初始化 SDK

首先,在应用启动时需要调用 LightIMSDK.init() 方法来初始化 SDK,并设置监听器以接收新消息。

import 'dart:convert';

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

void main() {
  runApp(const App());
}

class App extends StatelessWidget {
  const App({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const HomePage(),
    );
  }
}

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

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final _textEditingController1 = TextEditingController();
  final _textEditingController2 = TextEditingController();

  @override
  void initState() {
    super.initState();
    LightIMSDK.init(
        endpoint: '127.0.0.1:8080/api/c',
        listener: LightIMSDKListener(
          onReceiveNewMessage: (p0) {
             debugPrint(jsonEncode(p0.toMap()));
          },
        ));
  }

  @override
  void dispose() {
    _textEditingController1.dispose();
    _textEditingController2.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          TextField(
            controller: _textEditingController1,
            decoration: InputDecoration(labelText: '用户名'),
          ),
          TextField(
            controller: _textEditingController2,
            decoration: InputDecoration(labelText: 'Token'),
          ),
          ElevatedButton(
            onPressed: _login,
            child: const Text('登录'),
          ),
          ElevatedButton(
            onPressed: _sendMessage,
            child: const Text('发消息'),
          ),
        ],
      ),
    );
  }

  void _login() async {
    final res = await LightIMSDK.login(
      userId: _textEditingController1.text,
      token: _textEditingController2.text,
    );
     debugPrint(res.toString());
  }

  void _sendMessage() async {
    final res = await LightIMSDK.sendTextMessage(
      conversationId: 'c_1_2',
      text: '你好',
    );
    debugPrint(jsonEncode(res?.data?.toMap() ?? {}));
  }
}

示例代码解释

  1. 导入库

    import 'dart:convert';
    import 'package:flutter/material.dart';
    import 'package:light_im_sdk/light_im_sdk.dart';
    
  2. 初始化应用

    void main() {
      runApp(const App());
    }
    
  3. 定义应用主体

    class App extends StatelessWidget {
      const App({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
            useMaterial3: true,
          ),
          home: const HomePage(),
        );
      }
    }
    
  4. 定义主页面

    class HomePage extends StatefulWidget {
      const HomePage({super.key});
    
      @override
      State<HomePage> createState() => _HomePageState();
    }
    
  5. 实现页面逻辑

    class _HomePageState extends State<HomePage> {
      final _textEditingController1 = TextEditingController();
      final _textEditingController2 = TextEditingController();
    
      @override
      void initState() {
        super.initState();
        LightIMSDK.init(
            endpoint: '127.0.0.1:8080/api/c',
            listener: LightIMSDKListener(
              onReceiveNewMessage: (p0) {
                debugPrint(jsonEncode(p0.toMap()));
              },
            ));
      }
    
      @override
      void dispose() {
        _textEditingController1.dispose();
        _textEditingController2.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Column(
            children: [
              TextField(
                controller: _textEditingController1,
                decoration: InputDecoration(labelText: '用户名'),
              ),
              TextField(
                controller: _textEditingController2,
                decoration: InputDecoration(labelText: 'Token'),
              ),
              ElevatedButton(
                onPressed: _login,
                child: const Text('登录'),
              ),
              ElevatedButton(
                onPressed: _sendMessage,
                child: const Text('发消息'),
              ),
            ],
          ),
        );
      }
    
      void _login() async {
        final res = await LightIMSDK.login(
          userId: _textEditingController1.text,
          token: _textEditingController2.text,
        );
        debugPrint(res.toString());
      }
    
      void _sendMessage() async {
        final res = await LightIMSDK.sendTextMessage(
          conversationId: 'c_1_2',
          text: '你好',
        );
        debugPrint(jsonEncode(res?.data?.toMap() ?? {}));
      }
    }
    

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

1 回复

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


light_im_sdk 是一个轻量级的即时通讯(IM)插件,专门为 Flutter 应用程序设计,提供了基本的即时通讯功能。它可以帮助开发者快速集成聊天、消息发送、接收等功能到 Flutter 应用中。

以下是使用 light_im_sdk 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  light_im_sdk: ^latest_version

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

2. 初始化 SDK

在使用 light_im_sdk 之前,你需要先初始化它。通常,你可以在 main.dart 或应用的入口文件中进行初始化:

import 'package:light_im_sdk/light_im_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Light IM SDK
  await LightIM.init(
    appId: 'your_app_id',
    appKey: 'your_app_key',
  );
  
  runApp(MyApp());
}

3. 用户登录

在用户登录时,你需要调用 LightIM.login 方法来进行用户认证:

void loginUser(String userId, String token) async {
  try {
    await LightIM.login(userId: userId, token: token);
    print('Login successful');
  } catch (e) {
    print('Login failed: $e');
  }
}

4. 发送消息

你可以使用 LightIM.sendMessage 方法来发送消息:

void sendTextMessage(String receiverId, String text) async {
  try {
    await LightIM.sendMessage(
      receiverId: receiverId,
      messageType: 'text',
      content: text,
    );
    print('Message sent successfully');
  } catch (e) {
    print('Failed to send message: $e');
  }
}

5. 接收消息

你可以通过监听消息事件来接收消息:

void setupMessageListener() {
  LightIM.onMessageReceived.listen((message) {
    print('Received message: ${message.content}');
    // 处理接收到的消息
  });
}

6. 注销用户

当用户注销时,调用 LightIM.logout 方法:

void logoutUser() async {
  try {
    await LightIM.logout();
    print('Logout successful');
  } catch (e) {
    print('Logout failed: $e');
  }
}

7. 处理其他功能

light_im_sdk 还提供了其他功能,如群组管理、好友管理、消息撤回等。你可以根据具体需求调用相应的 API。

8. 处理错误

在使用 SDK 时,务必处理可能出现的错误,例如网络错误、认证失败等。你可以通过 try-catch 块来捕获异常并进行处理。

9. 调试与日志

light_im_sdk 通常提供了一些调试选项和日志功能,你可以开启它们来帮助调试和排查问题。

LightIM.setDebugMode(true);

10. 清理资源

在应用退出或不再需要 IM 功能时,记得调用 LightIM.dispose 来释放资源。

void dispose() {
  LightIM.dispose();
}
回到顶部