官方 Flutter SDK,用于 Stream Chat
官方 Flutter 组件,用于 Stream Chat,一项构建聊天应用程序的服务。
快速链接
- 注册以获取 Stream Chat 的 API 密钥
- Flutter 聊天教程
- 聊天 UI 套件
- UI 文档
- 聊天客户端文档
V4 迁移指南
要从 V3 升级到 V4,请参阅 V4 迁移指南
更新日志
查看 pub.dev 上的 更新日志,了解软件包的最新更改。
Flutter 聊天教程
开始的最佳地点是 Flutter 聊天教程。它将教您如何使用此 SDK,并展示如何进行常见的必需更改。
示例应用
此仓库包含一个功能齐全的示例应用程序,并附带设置说明。示例位于 example 文件夹下。
添加依赖
将此添加到您的软件包的 pubspec.yaml 文件中,使用最新版本
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 的可用小部件。每个小部件都使用 StreamChat 或 StreamChannel 小部件来管理状态并与 Stream 服务通信。
- StreamChannelHeader
- StreamChannelListView
- StreamMessageInput
- StreamMessageListView
- StreamMessageWidget
- StreamChatTheme
- …
自定义样式
Flutter SDK 配备了一套功能齐全的小部件,您可以自定义这些小部件以适应您的应用程序样式和排版。更改聊天小部件的主题的方式与 MaterialApp 和 Theme 的方式非常相似。
开箱即用,所有聊天小部件都使用其默认样式,并且有两种方法可以更改样式
- 从您现有的
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(),
);
}
}
- 构建自定义主题并提供所有必需的自定义
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)。有关更多详细信息,请参阅我们的许可证文件。
