class CustomChatPersistentClient extends ChatPersistenceClient {
...
}
final client = StreamChatClient(
apiKey ?? kDefaultStreamApiKey,
logLevel: Level.INFO,
)..chatPersistenceClient = CustomChatPersistentClient();Flutter Offline
To add data persistence you can extend the class ChatPersistenceClient and pass an instance to the StreamChatClient .
We provide an official persistent client in the stream_chat_persistence package that works using the library drift (https://drift.simonbinder.eu/), an SQLite ORM.
Add this to your package’s pubspec.yaml file, using the latest version
dependencies:
stream_chat_persistence: ^latest_versionYou should then run flutter packages get
The usage is pretty simple.
- Create a new instance of StreamChatPersistenceClient providing
logLevelandconnectionMode
final chatPersistentClient = StreamChatPersistenceClient(
logLevel: Level.INFO,
connectionMode: ConnectionMode.background,
);- Pass the instance to the official
StreamChatClient
final client = StreamChatClient(
apiKey ?? kDefaultStreamApiKey,
logLevel: Level.INFO,
)..chatPersistenceClient = chatPersistentClient;And you are ready to go…
Note that passing ConnectionMode.background the database uses a background isolate to unblock the main thread. The StreamChatClient uses the chatPersistentClient to synchronize the database with the newest information every time it receives new data about channels/messages/users.
Multi-user
The DB file is named after the userId, so if you instantiate a client using a different userId you will use a different database.
Calling client.disconnect(flushOfflineStorage: true) flushes all current database data.
Updating/deleting/sending a message while offline
The information about the action is saved in offline storage. When the client returns online, everything is retried.