官方 Flutter SDK,用于 Stream Chat

官方 Flutter 组件,用于 Stream Chat,一项构建聊天应用程序的服务。

Pub CI

快速链接

V4 迁移指南

要从 V3 升级到 V4,请参阅 V4 迁移指南

更新日志

查看 pub.dev 上的 更新日志,了解软件包的最新更改。

Flutter 聊天教程

开始的最佳地点是 Flutter 聊天教程。它将教您如何使用此 SDK,并展示如何进行常见的必需更改。

示例应用

此仓库包含一个功能齐全的示例应用程序,并附带设置说明。示例位于 example 文件夹下。

添加依赖

将此添加到您的软件包的 pubspec.yaml 文件中,使用最新版本 Pub

dependencies:
 stream_chat_flutter: ^latest_version

然后您应该运行 flutter packages get

Android

该软件包使用 photo_manager 来访问设备的相册。请遵循 此 wiki 来满足 Android 要求。

iOS

该库使用 flutter file picker 插件 从操作系统中选择文件。请遵循 此 wiki 来满足 iOS 要求。

我们还使用 video_player 来播放视频。请遵循 此指南 来满足要求。

要从相机选择图片,我们使用 image_picker 插件。请遵循 这些说明 来检查要求。

故障排除

您可能会在构建应用程序时遇到一些问题。如果似乎与 flutter file picker 插件 相关,请务必查看 此页面

文档

此软件包提供了将 Stream Chat 集成到您的应用程序所需的 UI 组件。或者,您可以使用核心软件包 stream_chat_flutter_core,它允许更多自定义并提供业务逻辑但没有 UI 组件。如果您需要最大的 API 控制权,请使用低级客户端软件包:stream_chat

UI 组件

这些是可用于构建应用程序 UI 的可用小部件。每个小部件都使用 StreamChatStreamChannel 小部件来管理状态并与 Stream 服务通信。

自定义样式

Flutter SDK 配备了一套功能齐全的小部件,您可以自定义这些小部件以适应您的应用程序样式和排版。更改聊天小部件的主题的方式与 MaterialAppTheme 的方式非常相似。

开箱即用,所有聊天小部件都使用其默认样式,并且有两种方法可以更改样式

  1. 从您现有的 MaterialApp 样式初始化 StreamChatTheme

class MyApp extends StatelessWidget {
  final StreamChatClient client;

  MyApp(this.client);

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

    return MaterialApp(
      theme: theme,
      builder: (context, child) => StreamChat(
       child: child,
       client: client,
       streamChatThemeData: StreamChatThemeData.fromTheme(theme),
      ),
      home: ChannelListPage(),
      );
  }
}
  1. 构建自定义主题并提供所有必需的自定义

class MyApp extends StatelessWidget {
  final StreamChatClient client;

  MyApp(this.client);

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

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

离线存储

要添加数据持久性,您可以扩展 ChatPersistenceClient 类并将实例传递给 StreamChatClient

class CustomChatPersistentClient extends ChatPersistenceClient {
...
}

final client = StreamChatClient(
  apiKey ?? kDefaultStreamApiKey,
  logLevel: Level.INFO,
)..chatPersistenceClient = CustomChatPersistentClient();

我们在 (stream_chat_persistence)[https://pub.dev/packages/stream_chat_persistence] 软件包中提供了官方的持久性客户端。

import 'package:stream_chat_persistence/stream_chat_persistence.dart';

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

final client = StreamChatClient(
  apiKey ?? kDefaultStreamApiKey,
  logLevel: Level.INFO,
)..chatPersistenceClient = chatPersistentClient;

贡献

我们欢迎改进此库或解决问题的代码更改,在将拉取请求提交到 Github 之前,请确保遵循所有最佳实践并添加适当的测试。我们很高兴将您的代码合并到官方仓库中。请确保首先签署我们的 贡献者许可协议 (CLA)。有关更多详细信息,请参阅我们的许可证文件。

GitHub

查看 Github