Flutter Offline

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 (https://moor.simonbinder.eu/), 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.

  1. Create a new instance of StreamChatPersistenceClient providing logLevel and connectionMode
final chatPersistentClient = StreamChatPersistenceClient(
 logLevel: Level.INFO,
 connectionMode: ConnectionMode.background,
);
  1. 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.

© Getstream.io, Inc. All Rights Reserved.