Flutter Offline

LAST EDIT Feb 16 2021

To add data persistence you can extend the class ChatPersistenceClient and pass an instance to the StreamChatClient.

1
2
3
4
5
6
7
8
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

1
2
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

1
2
3
4
final chatPersistentClient = StreamChatPersistenceClient( 
  logLevel: Level.INFO, 
  connectionMode: ConnectionMode.background, 
);

2. Pass the instance to the official StreamChatClient

1
2
3
4
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-userCopied!

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 offlineCopied!

The information about the action is saved in offline storage. When the client returns online, everything is retried.