Flutter即时通讯UI组件插件light_im_uikit的使用

Flutter即时通讯UI组件插件light_im_uikit的使用

本文将介绍如何在Flutter项目中使用light_im_uikit插件来快速构建一个即时通讯应用。通过简单的配置和代码实现,您可以轻松集成聊天功能到您的应用中。


环境准备

在开始之前,请确保您的开发环境已正确配置:

  1. 安装Flutter SDK。
  2. 配置好Dart环境。
  3. 准备好后端服务(例如IM服务器),并获取相应的endpointtoken信息。

1. 添加依赖

pubspec.yaml文件中添加light_im_uikit依赖:

dependencies:
  light_im_uikit: ^1.0.0 # 请根据实际版本号进行替换

然后运行以下命令安装依赖:

flutter pub get

2. 初始化插件

在应用启动时初始化light_im_uikit,并完成登录操作。以下是初始化的代码示例:

import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:light_im_uikit/light_im_uikit.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized(); // 确保Flutter绑定完成

  // 初始化插件,传入后端服务的endpoint
  LightIMUIKit.init(endpoint: '127.0.0.1:8080/api/c');

  // 登录用户,传入userId和token
  await LightIMUIKit.login(
    userId: '1', // 用户ID
    token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...YourToken...', // 用户登录Token
  );

  runApp(const App()); // 启动应用
}

3. 构建聊天界面

在应用中,我们可以通过LimConversationPageLimChatPage两个主要页面来实现聊天功能。

3.1 会话列表页面

LimConversationPage用于展示用户的会话列表。点击某一会话可以跳转到具体的聊天页面。

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return LimConversationPage(
      title: const Text('会话列表'), // 设置页面标题
      onTapItem: (conv) { // 点击会话回调
        Navigator.push(
          context,
          CupertinoPageRoute(
            builder: (BuildContext context) => LimChatPage(conversation: conv), // 跳转到聊天页面
          ),
        );
      },
    );
  }
}

3.2 聊天页面

LimChatPage用于展示具体的聊天内容。传入conversation对象即可加载对应的聊天记录。

class LimChatPage extends StatelessWidget {
  final dynamic conversation;

  const LimChatPage({required this.conversation, super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(conversation.name ?? '未知会话'), // 设置聊天窗口标题
      ),
      body: LimChatBody( // 加载聊天内容
        conversationId: conversation.id,
      ),
    );
  }
}

4. 自定义滚动行为

为了支持触摸和鼠标拖动交互,我们可以自定义滚动行为。以下是自定义滚动行为的代码:

class _CustomScrollBehavior extends MaterialScrollBehavior {
  [@override](/user/override)
  Set<PointerDeviceKind> get dragDevices => {
        PointerDeviceKind.touch,
        PointerDeviceKind.mouse,
      };
}

MaterialApp中应用此滚动行为:

MaterialApp(
  title: 'Light IM UIKit',
  home: const HomePage(),
  scrollBehavior: _CustomScrollBehavior(), // 应用自定义滚动行为
);

5. 完整示例代码

以下是完整的示例代码,您可以直接复制并在项目中运行:

import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:light_im_uikit/light_im_uikit.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  LightIMUIKit.init(endpoint: '127.0.0.1:8080/api/c');
  await LightIMUIKit.login(
    userId: '1',
    token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...YourToken...',
  );

  runApp(const App());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Light IM UIKit',
      home: const HomePage(),
      scrollBehavior: _CustomScrollBehavior(),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return LimConversationPage(
      title: const Text('会话列表'),
      onTapItem: (conv) {
        Navigator.push(
          context,
          CupertinoPageRoute(
            builder: (BuildContext context) => LimChatPage(conversation: conv),
          ),
        );
      },
    );
  }
}

class _CustomScrollBehavior extends MaterialScrollBehavior {
  [@override](/user/override)
  Set<PointerDeviceKind> get dragDevices => {
        PointerDeviceKind.touch,
        PointerDeviceKind.mouse,
      };
}

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

1 回复

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


light_im_uikit 是一个用于 Flutter 的即时通讯 UI 组件库,它提供了一套现成的 UI 组件,帮助你快速构建即时通讯应用。以下是如何使用 light_im_uikit 的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  light_im_uikit: ^版本号  # 请替换为最新版本

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

2. 初始化 light_im_uikit

在你的应用中初始化 light_im_uikit。通常你可以在 main.dart 中进行初始化。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 LightIMUIKit
  await LightIMUIKit.init(
    appId: '你的AppId',  // 替换为你的AppId
    appKey: '你的AppKey',  // 替换为你的AppKey
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Light IM UIKit Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}

3. 登录用户

在使用即时通讯功能之前,用户需要登录。你可以使用 LightIMUIKit.login 方法来登录用户。

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

class HomePage extends StatelessWidget {
  Future<void> _login() async {
    try {
      await LightIMUIKit.login(
        userId: '用户ID',
        token: '用户Token',
      );
      print('登录成功');
    } catch (e) {
      print('登录失败: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _login,
          child: Text('登录'),
        ),
      ),
    );
  }
}

4. 使用聊天界面

light_im_uikit 提供了现成的聊天界面组件,你可以直接使用 LightIMUIKit.chatPage 来展示聊天界面。

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

class ChatPage extends StatelessWidget {
  final String targetId;

  ChatPage({required this.targetId});

  @override
  Widget build(BuildContext context) {
    return LightIMUIKit.chatPage(
      targetId: targetId,
      conversationType: ConversationType.PRIVATE,
    );
  }
}

5. 导航到聊天页面

你可以在应用中导航到聊天页面。

class HomePage extends StatelessWidget {
  Future<void> _login() async {
    try {
      await LightIMUIKit.login(
        userId: '用户ID',
        token: '用户Token',
      );
      print('登录成功');
    } catch (e) {
      print('登录失败: $e');
    }
  }

  void _navigateToChat(BuildContext context) {
    Navigator.of(context).push(
      MaterialPageRoute(
        builder: (context) => ChatPage(targetId: '目标用户ID'),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _login,
              child: Text('登录'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () => _navigateToChat(context),
              child: Text('进入聊天'),
            ),
          ],
        ),
      ),
    );
  }
}

6. 自定义主题和样式

light_im_uikit 允许你自定义主题和样式。你可以在初始化时传入自定义的主题配置。

await LightIMUIKit.init(
  appId: '你的AppId',
  appKey: '你的AppKey',
  theme: LightIMUIKitTheme(
    primaryColor: Colors.blue,
    accentColor: Colors.green,
    // 其他自定义样式
  ),
);

7. 处理消息事件

你可以通过监听消息事件来处理消息的发送、接收等操作。

LightIMUIKit.onMessageReceived.listen((message) {
  print('收到消息: ${message.content}');
});

LightIMUIKit.onMessageSent.listen((message) {
  print('消息发送成功: ${message.content}');
});

8. 其他功能

light_im_uikit 还提供了其他功能,如群组管理、好友管理、消息撤回等。你可以参考官方文档来了解更多细节。

9. 运行应用

完成上述步骤后,你可以运行你的 Flutter 应用,体验即时通讯功能。

flutter run
回到顶部