diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index c4bcef33..4ed2c939 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -985,7 +985,7 @@ class Channel { if (preferOffline && cid != null) { final updatedState = (await _client.chatPersistenceClient?.getChannelStateByCid( - cid, + cid!, messagePagination: messagesPagination, ))!; if (updatedState.messages.isNotEmpty) { @@ -1014,7 +1014,7 @@ class Channel { rethrow; } return _client.chatPersistenceClient!.getChannelStateByCid( - cid, + cid!, messagePagination: messagesPagination, ); } @@ -1122,7 +1122,10 @@ class Channel { if (clearHistory == true) { state!.truncate(); - await _client.chatPersistenceClient?.deleteMessageByCid(_cid); + final cid = _cid; + if (cid != null) { + await _client.chatPersistenceClient?.deleteMessageByCid(cid); + } } return _client.decode(response.data, EmptyResponse.fromJson); @@ -1252,12 +1255,12 @@ class ChannelClientState { _startCleaningPinnedMessages(); _channel._client.chatPersistenceClient - ?.getChannelThreads(_channel.cid) + ?.getChannelThreads(_channel.cid!) .then((threads) { _threads = threads; }).then((_) { _channel._client.chatPersistenceClient - ?.getChannelStateByCid(_channel.cid) + ?.getChannelStateByCid(_channel.cid!) .then((state) { // Replacing the persistence state members with the latest // `channelState.members` as they may have changes over the time. @@ -1734,7 +1737,7 @@ class ChannelClientState { set _threads(Map?> v) { _channel._client.chatPersistenceClient?.updateMessages( - _channel.cid, + _channel.cid!, v.values.expand((v) => v!).toList(), ); _threadsController.add(v); diff --git a/packages/stream_chat/lib/src/client.dart b/packages/stream_chat/lib/src/client.dart index 1066c670..69b6321d 100644 --- a/packages/stream_chat/lib/src/client.dart +++ b/packages/stream_chat/lib/src/client.dart @@ -764,7 +764,7 @@ class StreamChatClient { final updateData = _mapChannelStateToChannel(channels); await _chatPersistenceClient?.updateChannelQueries( - filter, + filter ?? {}, channels.map((c) => c.channel!.cid).toList(), clearQueryCache: paginationParams.offset == 0, ); @@ -1434,7 +1434,11 @@ class ClientState { void _listenChannelHidden() { _subscriptions.add(_client.on(EventType.channelHidden).listen((event) { - _client.chatPersistenceClient?.deleteChannels([event.cid]); + final cid = event.cid; + + if (cid != null) { + _client.chatPersistenceClient?.deleteChannels([cid]); + } if (channels != null) { channels = channels?..removeWhere((cid, ch) => cid == event.cid); } diff --git a/packages/stream_chat/lib/src/db/chat_persistence_client.dart b/packages/stream_chat/lib/src/db/chat_persistence_client.dart index 2dc2521c..07424299 100644 --- a/packages/stream_chat/lib/src/db/chat_persistence_client.dart +++ b/packages/stream_chat/lib/src/db/chat_persistence_client.dart @@ -39,32 +39,32 @@ abstract class ChatPersistenceClient { Future> getChannelCids(); /// Get stored [ChannelModel]s by providing channel [cid] - Future getChannelByCid(String? cid); + Future getChannelByCid(String cid); /// Get stored channel [Member]s by providing channel [cid] - Future> getMembersByCid(String? cid); + Future> getMembersByCid(String cid); /// Get stored channel [Read]s by providing channel [cid] - Future> getReadsByCid(String? cid); + Future> getReadsByCid(String cid); /// Get stored [Message]s by providing channel [cid] /// /// Optionally, you can [messagePagination] /// for filtering out messages Future> getMessagesByCid( - String? cid, { + String cid, { PaginationParams? messagePagination, }); /// Get stored pinned [Message]s by providing channel [cid] Future> getPinnedMessagesByCid( - String? cid, { + String cid, { PaginationParams? messagePagination, }); /// Get [ChannelState] data by providing channel [cid] Future getChannelStateByCid( - String? cid, { + String cid, { PaginationParams? messagePagination, PaginationParams? pinnedMessagePagination, }) async { @@ -99,8 +99,8 @@ abstract class ChatPersistenceClient { /// If [clearQueryCache] is true before the insert /// the list of matching rows will be deleted Future updateChannelQueries( - Map? filter, - List cids, { + Map filter, + List cids, { bool clearQueryCache = false, }); @@ -119,46 +119,46 @@ abstract class ChatPersistenceClient { Future deletePinnedMessageByIds(List messageIds); /// Remove a message by channel [cid] - Future deleteMessageByCid(String? cid) => deleteMessageByCids([cid]); + Future deleteMessageByCid(String cid) => deleteMessageByCids([cid]); /// Remove a pinned message by channel [cid] Future deletePinnedMessageByCid(String cid) async => deletePinnedMessageByCids([cid]); /// Remove a message by message [cids] - Future deleteMessageByCids(List cids); + Future deleteMessageByCids(List cids); /// Remove a pinned message by message [cids] Future deletePinnedMessageByCids(List cids); /// Remove a channel by [cid] - Future deleteChannels(List cids); + Future deleteChannels(List cids); /// Updates the message data of a particular channel [cid] with /// the new [messages] data - Future updateMessages(String? cid, List messages); + Future updateMessages(String cid, List messages); /// Updates the pinned message data of a particular channel [cid] with /// the new [messages] data - Future updatePinnedMessages(String? cid, List messages); + Future updatePinnedMessages(String cid, List messages); /// Returns all the threads by parent message of a particular channel by /// providing channel [cid] - Future>> getChannelThreads(String? cid); + Future>> getChannelThreads(String cid); /// Updates all the channels using the new [channels] data. - Future updateChannels(List channels); + Future updateChannels(List channels); /// Updates all the members of a particular channle [cid] /// with the new [members] data - Future updateMembers(String? cid, List members); + Future updateMembers(String cid, List members); /// Updates the read data of a particular channel [cid] with /// the new [reads] data - Future updateReads(String? cid, List reads); + Future updateReads(String cid, List reads); /// Updates the users data with the new [users] data - Future updateUsers(List users); + Future updateUsers(List users); /// Updates the reactions data with the new [reactions] data Future updateReactions(List reactions); @@ -167,7 +167,7 @@ abstract class ChatPersistenceClient { Future deleteReactionsByMessageId(List messageIds); /// Deletes all the members by channel [cids] - Future deleteMembersByCids(List cids); + Future deleteMembersByCids(List cids); /// Update the channel state data using [channelState] Future updateChannelState(ChannelState channelState) => @@ -189,8 +189,9 @@ abstract class ChatPersistenceClient { deleteMembers, ]); - final channels = - channelStates.map((it) => it.channel).where((it) => it != null); + final channels = channelStates + .map((it) => it.channel) + .where((it) => it != null) as Iterable; final reactions = channelStates.expand((it) => it.messages).expand((it) => [ if (it.ownReactions != null) @@ -199,7 +200,7 @@ abstract class ChatPersistenceClient { ...it.latestReactions!.where((r) => r.userId != null) ]); - final users = channelStates + var users = channelStates .map((cs) => [ cs.channel?.createdBy, ...cs.messages @@ -215,7 +216,7 @@ abstract class ChatPersistenceClient { ...cs.members.map((m) => m.user), ]) .expand((it) => it) - .where((it) => it != null); + .where((it) => it != null) as Iterable; final updateMessagesFuture = channelStates.map((it) { final cid = it.channel!.cid;