Official Flutter SDK for Stream Chat
The official Flutter components for Stream Chat, a service for building chat applications.
Quick Links
- Register to get an API key for Stream Chat
- Flutter Chat Tutorial
- Chat UI Kit
- UI Docs
- Chat Client Docs
V4 Migration Guide
For upgrading from V3 to V4, please refer to the V4 Migration Guide
Changelog
Check out the changelog on pub.dev to see the latest changes in the package.
Flutter Chat Tutorial
The best place to start is the Flutter Chat Tutorial. It teaches you how to use this SDK and also shows how to make frequently required changes.
Example App
This repository includes a fully functional example app with setup instructions. The example is available under the example folder.
Add dependency
Add this to your package's pubspec.yaml file, use the latest version
dependencies:
stream_chat_flutter: ^latest_version
You should then run flutter packages get
Android
The package uses photo_manager
to access the device's photo library.
Follow this wiki to fulfil the Android requirements.
You need to take additional steps if you are targeting Android 13. Read this section for more information.
iOS
The library uses flutter file picker plugin to pick files from the os. Follow this wiki to fulfill iOS requirements.
We also use video_player
to reproduce videos. Follow this guide to fulfill the requirements.
To pick images from the camera, we use the image_picker
plugin.
Follow these instructions to check the requirements.
Web
For the web, edit your index.html
and add the following in the <body>
tag in order to allow the SDK to override the right-click behaviour:
<body oncontextmenu="return false;">
MacOS
For MacOS use the file_selector
package.
Follow these instructions to check the requirements.
You also need to add the following entitlement:
<key>com.apple.security.network.client</key>
<true/>
Troubleshooting
It may happen that you have some problems building the app. If it seems related to the flutter file picker plugin make sure to check this page
Docs
This package provides UI components required for integrating Stream Chat into your application.
Alternatively, you may use the core package stream_chat_flutter_core
which allows more customisation and provides business logic but no UI components.
If you require the maximum amount of control over the API, please use the low level client package: stream_chat
.
UI Components
These are the available Widgets that you can use to build your application UI.
Every widget uses the StreamChat
or StreamChannel
widgets to manage the state and communicate with Stream services.
- StreamChannelHeader
- StreamChannelListView
- StreamMessageInput
- StreamMessageListView
- StreamMessageWidget
- StreamChatTheme
- ...
Customizing styles
The Flutter SDK comes with a fully designed set of widgets that you can customize to fit with your application style and typography.
Changing the theme of Chat widgets works in a very similar way that MaterialApp
and Theme
do.
Out of the box, all chat widgets use their default styling, and there are two ways to change the styling:
- Initialize the
StreamChatTheme
from your existingMaterialApp
style
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(),
);
}
}
- Construct a custom theme and provide all the customizations needed
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(),
);
}
}
Offline storage
To add data persistence you can extend the class ChatPersistenceClient
and pass an instance to the StreamChatClient
.
class CustomChatPersistentClient extends ChatPersistenceClient {
...
}
final client = StreamChatClient(
apiKey ?? kDefaultStreamApiKey,
logLevel: Level.INFO,
)..chatPersistenceClient = CustomChatPersistentClient();
We provide an official persistent client in the (stream_chat_persistence)https://pub.dev/packages/stream_chat_persistence
package.
import 'package:stream_chat_persistence/stream_chat_persistence.dart';
final chatPersistentClient = StreamChatPersistenceClient(
logLevel: Level.INFO,
connectionMode: ConnectionMode.regular,
);
final client = StreamChatClient(
apiKey ?? kDefaultStreamApiKey,
logLevel: Level.INFO,
)..chatPersistenceClient = chatPersistentClient;
Contributing
We welcome code changes that improve this library or fix a problem, please make sure to follow all best practices and add tests if applicable before submitting a Pull Request on GitHub. We are pleased to merge your code into the official repository. Make sure to sign our Contributor License Agreement (CLA) first. See our license file for more details.
Libraries
- conditional_parent_builder/conditional_parent_builder
- platform_widget_builder/platform_widget_builder
- platform_widget_builder/src/desktop_widget
- platform_widget_builder/src/desktop_widget_base
- platform_widget_builder/src/desktop_widget_builder
- platform_widget_builder/src/platform_widget
- platform_widget_builder/src/platform_widget_base
- platform_widget_builder/src/platform_widget_builder
- scrollable_positioned_list/scrollable_positioned_list
- scrollable_positioned_list/src/element_registry
- scrollable_positioned_list/src/indexed_key
- scrollable_positioned_list/src/item_positions_listener
- scrollable_positioned_list/src/item_positions_notifier
- scrollable_positioned_list/src/positioned_list
- scrollable_positioned_list/src/post_mount_callback
- scrollable_positioned_list/src/scroll_view
- scrollable_positioned_list/src/scrollable_positioned_list
- scrollable_positioned_list/src/viewport
- scrollable_positioned_list/src/wrapping
- stream_chat_flutter