Offline Support
Adding Local Data Persistence for Offline Support
Introduction
Most messaging apps need to work regardless of whether the app is currently connected to the internet. Local data persistence stores the fetched data from the backend on a local SQLite database using the moor package in Flutter. All packages in the SDK can use local data persistence to store messages across multiple platforms.
Implementation
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
package that works using the library moor, an SQLite ORM.
Add this to your package's pubspec.yaml
file, using the latest version.
dependencies:
stream_chat_persistence: ^latest_version
You should then run flutter packages get
The usage is pretty simple.
- Create a new instance of
StreamChatPersistenceClient
providinglogLevel
andconnectionMode
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.disconnectUser(flushChatPersistence: 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.