Flutter实时聊天插件stream_chat_flutter的使用

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

Flutter实时聊天插件stream_chat_flutter的使用

简介

Stream Chat Flutter SDK 是一个官方提供的用于在Flutter应用程序中集成实时聊天功能的组件库。它提供了丰富的UI组件,使得开发者可以快速构建出美观且功能强大的聊天应用。

SDK Hero

快速链接

示例代码

以下是一个完整的示例代码,展示了如何使用 stream_chat_flutter 创建一个基本的聊天应用:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 stream_chat_flutter 依赖:

dependencies:
  stream_chat_flutter: ^latest_version

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

2. 初始化 StreamChatClient

main.dart 中初始化 StreamChatClient 并连接用户:

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

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

  final client = StreamChatClient(
    'your_api_key_here', // 替换为你的 API Key
    logLevel: Level.OFF,
  );

  await client.connectUser(
    User(id: 'user_id_here'), // 替换为用户的 ID
    'user_token_here', // 替换为用户的 Token
  );

  runApp(MyApp(client: client));
}

class MyApp extends StatelessWidget {
  final StreamChatClient client;

  const MyApp({Key? key, required this.client}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: StreamChat(
        client: client,
        child: ChannelListPage(),
      ),
    );
  }
}

3. 创建频道列表页面

创建一个显示频道列表的页面:

class ChannelListPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Channels')),
      body: StreamChannelListView(
        filter: Filter.in_('members', [StreamChat.of(context).currentUser!.id]),
        sort: [SortOption('last_message_at')],
        limit: 20,
      ),
    );
  }
}

4. 创建聊天页面

当用户点击某个频道时,导航到聊天页面:

class ChatPage extends StatelessWidget {
  final Channel channel;

  ChatPage({required this.channel});

  @override
  Widget build(BuildContext context) {
    return StreamChannel(
      channel: channel,
      child: Scaffold(
        appBar: StreamChannelHeader(
          onImageTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => DebugChannelPage(),
              ),
            );
          },
        ),
        body: Column(
          children: [
            Expanded(
              child: StreamMessageListView(
                threadBuilder: (_, parent) => ThreadPage(parent: parent!),
              ),
            ),
            StreamMessageInput(),
          ],
        ),
      ),
    );
  }
}

5. 创建线程页面

当用户点击某条消息时,导航到线程页面:

class ThreadPage extends StatelessWidget {
  final Message parent;

  ThreadPage({required this.parent});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: StreamThreadHeader(parent: parent),
      body: Column(
        children: [
          Expanded(
            child: StreamMessageListView(
              parentMessage: parent,
            ),
          ),
          StreamMessageInput(
            messageInputController: StreamMessageInputController(
              message: Message(parentId: parent.id),
            ),
          ),
        ],
      ),
    );
  }
}

自定义样式

你可以通过 StreamChatTheme 来自定义聊天界面的样式:

class MyApp extends StatelessWidget {
  final StreamChatClient client;

  const MyApp({Key? key, required this.client}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final theme = ThemeData(
      primarySwatch: Colors.green,
    );

    return MaterialApp(
      theme: theme,
      home: StreamChat(
        client: client,
        streamChatThemeData: StreamChatThemeData.fromTheme(theme).copyWith(
          ownMessageTheme: MessageTheme(
            messageBackgroundColor: Colors.black,
            messageText: TextStyle(color: Colors.white),
            avatarTheme: AvatarTheme(borderRadius: BorderRadius.circular(8)),
          ),
        ),
        child: ChannelListPage(),
      ),
    );
  }
}

离线存储

为了实现离线存储,你可以使用 stream_chat_persistence 包:

import 'package:stream_chat_persistence/stream_chat_persistence.dart';

final chatPersistentClient = StreamChatPersistenceClient(
  logLevel: Level.INFO,
  connectionMode: ConnectionMode.regular,
);

final client = StreamChatClient(
  'your_api_key_here',
  logLevel: Level.INFO,
)..chatPersistenceClient = chatPersistentClient;

总结

以上是使用 stream_chat_flutter 插件构建实时聊天应用的基本步骤。通过这些步骤,你可以快速搭建一个功能完善的聊天应用,并根据需要进行自定义和扩展。更多详细信息请参考 官方文档


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

1 回复

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


当然,以下是一个使用 stream_chat_flutter 插件来实现实时聊天功能的简单示例。这个示例将展示如何初始化 Stream Chat 客户端、连接到聊天服务器、以及显示聊天消息列表。

首先,确保你已经在 Flutter 项目中添加了 stream_chat_flutter 依赖。在 pubspec.yaml 文件中添加以下依赖:

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

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

接下来,我们需要在 Flutter 应用中进行一些设置。以下是一个基本的实现步骤:

  1. 初始化 Stream Chat 客户端

main.dart 文件中,首先导入必要的包并初始化 Stream Chat 客户端:

import 'package:flutter/material.dart';
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
import 'package:get_it/get_it.dart'; // 用于依赖注入

final getIt = GetIt.instance;

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化 Stream Chat 客户端
  final client = StreamChatClient('your_api_key', 'your_app_id');
  getIt.registerSingleton<StreamChatClient>(client);

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Stream Chat Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ChatScreen(),
    );
  }
}
  1. 创建聊天屏幕

创建一个新的 Dart 文件 chat_screen.dart,并在其中实现聊天屏幕:

import 'package:flutter/material.dart';
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
import 'package:get_it/get_it.dart';

class ChatScreen extends StatefulWidget {
  @override
  _ChatScreenState createState() => _ChatScreenState();
}

class _ChatScreenState extends State<ChatScreen> {
  late StreamChatClient client;
  late Channel channel;

  @override
  void initState() {
    super.initState();
    client = getIt<StreamChatClient>();

    // 连接到指定的频道(例如:一个聊天室)
    client.connectUser(
      User(
        id: 'user-123', // 用户ID
        name: 'John Doe', // 用户名
      ),
    );

    // 假设我们有一个现有的频道ID
    channel = MessageChannel(
      id: 'channel-id-123', // 替换为你的频道ID
      type: ChannelType.messaging,
      client: client,
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chat Screen'),
      ),
      body: StreamChat(
        channel: channel,
        // 配置其他选项,如消息输入、用户列表等
        customData: CustomChatData(
          messageInputOptions: MessageInputOptions(
            sendButtonLabel: 'Send',
          ),
        ),
      ),
    );
  }
}
  1. 运行应用

确保你已经替换了 your_api_keyyour_app_idchannel-id-123 为你自己的 Stream Chat API 密钥、应用ID和频道ID。然后运行你的 Flutter 应用。

这个示例展示了如何使用 stream_chat_flutter 插件来初始化 Stream Chat 客户端、连接到指定的聊天频道,并在屏幕上显示聊天消息。用户可以在聊天输入栏中输入消息并点击发送按钮来发送消息。

请注意,这只是一个基本的示例。根据实际需求,你可能需要添加更多功能,如用户认证、消息处理、消息持久化等。Stream Chat 提供了丰富的 API 和文档,可以帮助你实现这些高级功能。

回到顶部