## Upcoming 🐞 Fixed - [[#799]](https://github.com/GetStream/stream-chat-flutter/issues/799) Fixed `totalUnreadCount` is not updating when app is resumed from background mode. - Fix retry mechanism failing in some cases. ## 3.3.0 ✅ Added - Extra properties added to `PaginationParams` to aid in fetching messages. - Added hard delete functionality. 🐞 Fixed - `closeConnection()` now uses `normalClosure` status when closing websocket. - Fixed local unread count indicator increasing for thread replies. - Fixed user presence indicator not updating correctly. - `ChannelEvent.membersCount` defaults to 0 avoiding parsing errors due to missing `members_count` field. ## 3.2.0 🐞 Fixed - `markAllRead()` now updates local channel states. - [[#744]](https://github.com/GetStream/stream-chat-flutter/issues/744) Fixed unread count not updating correctly ## 3.1.1 ✅ Added - Added `Filter.notExists`. 🐞 Fixed - [[#710]](https://github.com/GetStream/stream-chat-flutter/issues/710) Fixed JWT requiring using `String` as id. - Fixed expired CDN attachment links not updating correctly. ## 3.0.0 🛑️ Breaking Changes from `2.2.1` - Added 6 new methods in `ChatPersistenceClient`. - `bulkUpdateMessages` - `bulkUpdatePinnedMessages` - `bulkUpdateMembers` - `bulkUpdateReads` - `updatePinnedMessageReactions` - `deletePinnedMessageReactionsByMessageId` ✅ Added - Added `Filter.contains` and `Filter.empty` - Added support for `next`, `previous` value pagination in `client.search` , [read more.](https://getstream.io/chat/docs/other-rest/search/#pagination) - `Attachment` class now has a `fileSize` and `mimeType` property. Setting a `file` will also set the `file_size` , `mime_type` key on `extraData`, so `attachment.fileSize`, `attachment.mimetype` and `attachment.extraData['file_size']` , `attachment.extraData['mime_type]` is same respectively. 🐞 Fixed - [[#659]](https://github.com/GetStream/stream-chat-flutter/issues/659) Fixed unread count not updating correctly. - Fix `Filter.empty()` json encoding. - [[#700]](https://github.com/GetStream/stream-chat-flutter/issues/700) Connecting user without providing `name` uses `id` instead for setting `user.name`. ## 2.2.1 🐞 Fixed - Fixed unread indicator not updating correctly - Fix `channel.show` not working because of null body ## 2.2.0 🐞 Fixed - Fixed `channel.markAllRead` throwing failed host lookup. ✅ Added - `User` and `OwnUser` classes now have an `image` property. Setting an image will also set the 'image' key on `extraData`, so `user.image` and `user.extraData['image']` is the same. - `User` and `OwnUser` classes now have a `name` property. Setting a name will also set the 'name' key on `extraData`, so `user.name` and `user.extraData['name']` is the same. - `Channel` class now has extra `image` getter and setter. As well as an `updateImage` to do a partial update after a channel has been initialized. - `Channel` class now has extra `name` getter and setter. As well as an `updateName` to do a partial update after a channel has been initialized. - Added slow mode which allows a cooldown period after a user sends a message. ## 2.1.1 🐞 Fixed - Mutes were not working correctly in 2.1.0 ## 2.1.0 🛑️ Removed - The `MessageTranslation` class has been removed. Use the new `i18n` field in the `Message` class instead. ✅ Added - The `Message` class now has an `i18n` field for translations - The `User` class now has a `language` field for the user's language preference. 🔄 Changed - `client.user` is now deprecated in favor of `client.currentUser`. - `client.userStream` is now deprecated in favor of `client.currentUserStream`. 🐞 Fixed - [#563](https://github.com/GetStream/stream-chat-flutter/issues/563): `Channel.stopWatching()` not working - [#575](https://github.com/GetStream/stream-chat-flutter/issues/575): Wrong `OwnUser.*` ## 2.0.0 🛑️ Breaking Changes from `1.5.3` - migrate this package to null safety - `ConnectUserWithProvider` now requires `tokenProvider` as a required param. (Removed from the constructor) - `client.disconnect()` is now divided into two different functions - `client.closeConnection()` -> for closing user websocket connection. - `client.disconnectUser()` -> for disconnecting user and resetting client state. - `client.devToken()` now returns a `Token` model instead of `String`. - `ApiError` is removed in favor of `StreamChatError` - `StreamChatError` -> parent type for all the stream errors. - `StreamWebSocketError` -> for user websocket related errors. - `StreamChatNetworkError` -> for network related errors. - `client.queryChannels()`, `channel.query()` options param is removed in favor of individual params - `option.state` -> bool state - `option.watch` -> bool watch - `option.presence` -> bool presence - `client.queryUsers()` options param is removed in favor of individual params - `option.presence` -> bool presence - Migrate this package to null safety - Added typed filters 🐞 Fixed - [#369](https://github.com/GetStream/stream-chat-flutter/issues/369): Client does not return without internet connection - several minor fixes - performance improvements ✅ Added - New `Location` enum is introduced for easily changing the client location/baseUrl. - New `client.openConnection()` and `client.closeConnection()` is introduced to connect/disconnect user ws connection. - New `client.partialUpdateMessage` and `channel.partialUpdateMessage` methods - `connectWebSocket` parameter in connect user calls to use the client in "connection-less" mode. 🔄 Changed - `baseURL` is now deprecated in favor of using `Location` to change data location. ## 2.0.0-nullsafety.8 🐞 Fixed - Export `PushProvider` enum ## 2.0.0-nullsafety.7 🛑️ Breaking Changes from `2.0.0-nullsafety.6` - `ConnectUserWithProvider` now requires `tokenProvider` as a required param. (Removed from the constructor) - `client.disconnect()` is now divided into two different functions - `client.closeConnection()` -> for closing user websocket connection. - `client.disconnectUser()` -> for disconnecting user and resetting client state. - `client.devToken()` now returns a `Token` model instead of `String`. - `ApiError` is removed in favor of `StreamChatError` - `StreamChatError` -> parent type for all the stream errors. - `StreamWebSocketError` -> for user websocket related errors. - `StreamChatNetworkError` -> for network related errors. - `client.queryChannels()`, `channel.query()` options param is removed in favor of individual params - `option.state` -> bool state - `option.watch` -> bool watch - `option.presence` -> bool presence - `client.queryUsers()` options param is removed in favor of individual params - `option.presence` -> bool presence ✅ Added - New `Location` enum is introduced for easily changing the client location/baseUrl. - New `client.openConnection()` and `client.closeConnection()` is introduced to connect/disconnect user ws connection. 🔄 Changed - `baseURL` is now deprecated in favor of using `Location` to change data location. ## 2.0.0-nullsafety.6 - Fix thread reply not working with attachments - Minor fixes ## 2.0.0-nullsafety.5 - Minor fixes - Performance improvements - Fixed `skip_push` in `client.sendMessage` - Added partial message update method ## 2.0.0-nullsafety.2 - Added new `Filter.raw` constructor - Changed extraData - Minor fixes ## 2.0.0-nullsafety.1 - Migrate this package to null safety - Added typed filters ## 1.5.3 - fix: `StreamChatClient.connect` returns quicker when you're using the persistence package ## 1.5.2 - fix: `queryChannels` should throw exceptions only if no data is present in cache. ## 1.5.1 - Minor fixes and improvements ## 1.5.0 - Minor fixes and improvements ## 1.4.0-beta - Improved attachment uploading - Fix: update member presence - Added skip_push to message model - Minor fixes and improvements ## 1.3.2+1-beta - Fixed queryChannels bug ## 1.3.1-beta - Debounced frequent db calls ## 1.3.0-beta - Save pinned messages in offline storage - Minor fixes - `StreamClient.QueryChannels` now returns a Stream and fetches the channels from storage before calling the api - Added `StreamClient.QueryChannelsOnline` and `StreamClient.QueryChannelsOffline` to fetch channels only from online or offline ## 1.2.0-beta - 🛑 **BREAKING** Changed signature of `StreamClient.search` method - Added `pinMessage` feature [docs here](https://getstream.io/chat/docs/flutter-dart/pinned_messages/?language=dart) - Fixed minor bugs ## 1.1.0-beta - Fixed minor bugs - Add support for custom attachment upload [docs here](https://getstream.io/chat/docs/flutter-dart/file_uploads/?language=dart) - Add support for asynchronous attachment upload ## 1.0.3-beta - Fixed issue with disconnecting after connecting without awaiting the connection result - Fixed bug that caused duplicated typing.stop events to be fired ## 1.0.2-beta - Deprecated `setUser`, `setGuestUser`, `setUserWithProvider` in favor of `connectUser`, `connectGuestUser` , `connectUserWithProvider` - Optimised reaction updates - i.e., Update first call Api later. ## 1.0.1-beta - Fixed pub analysis issues ## 1.0.0-beta - 🛑 **BREAKING** Renamed `Client` to less generic `StreamChatClient` - 🛑 **BREAKING** Segregated the persistence layer into separate package [stream_chat_persistence](https://pub.dev/packages/stream_chat_persistence) - 🛑 **BREAKING** Moved `Client.backgroundKeepAlive` to [core package](https://pub.dev/packages/stream_chat_core) - 🛑 **BREAKING** Moved `Client.showLocalNotification` to [core package](https://pub.dev/packages/stream_chat_core) and renamed it to `StreamChatCore.onBackgroundEventReceived` - Removed `flutter` dependency. This is now a pure Dart package 🥳 - Minor improvements and bugfixes ## 0.2.24+2 - Fix reconnection bug while using tokenProvider ## 0.2.24+1 - Stop ws reconnection after calling disconnect ## 0.2.24 - Create enum for push providers - Add merge helper functions in `Message` and `ChannelModel` for easier data manipulation ## 0.2.23+3 - Remove + notation from userAgent - Fix optimistic update for totalUnreadCount ## 0.2.23+2 - Do not throw an error when calling queryChannels without an active connection if the offline storage is enabled ## 0.2.23+1 - Throw an error when calling queryChannels without an active connection - Wait to establish a connection if calling queryChannels while connecting ## 0.2.23 - Add thread_participants in message model ## 0.2.22 - Add thread-less message reply feature (QuotedMessage) ## 0.2.21+2 - Fix but not throwing error during querychannels and persistance disabled - Fix reaction.updated event handling ## 0.2.21+1 - Fix error in the offline storage queryChannelCids query ## 0.2.21 - Fix channel.hide(clearHistory: true) not clearing local messages - Add banned field to member ## 0.2.20 - Return offline data only if the backend is unreachable. This avoids the glitch of the ChannelListView because we cannot sort by custom properties. ## 0.2.19 - Added message filters for `Client.search()` ## 0.2.18 - Correctly dispose resources when disposing the client state - Limit parallel queryChannels with same parameters to 1 - Added `clearUser` parameter to `client.disconnect` to remove the user instance of the client ## 0.2.17+1 - Do not retry messages when server returns error ## 0.2.17 - Add shadow ban feature ## 0.2.16 - Listen for user.updated events ## 0.2.15+2 - Fix reaction score updates ## 0.2.15+1 - Listen to reaction.updated event ## 0.2.15 - Fix search message response ## 0.2.14 - Add event.extradata ## 0.2.13+1 - Let user change channel.extradata if the channel is not initialized yet ## 0.2.13 - Add parent_id to events for typing indicators in threads ## 0.2.12+2 - Fix error with reactions with null user ## 0.2.12 - Do not save channels in memory if not being watched. This was leading to some bugs in some specific use-cases. ## 0.2.11 - Fix user.name getter - Use detached loggers - Throw error while connecting if it comes from backend - Fix ws reconnection ## 0.2.10+2 - Fix bug with event filtering ## 0.2.10+1 - Add default limit to pagination ## 0.2.10 - Added `channel.state.unreadCountStream` ## 0.2.9 - Adding a message on `Channel.update` is now optional ## 0.2.8+1 - Fix retry logic ## 0.2.8 - Add missing event types - Fix local sorting on offline storage ## 0.2.7+1 - `Client.channel` returns an existing channel if available - Update message in the offline storage if attachment has expired (for the new CDN) - Fix `GetMessagesByIdResponse` format - Do not query messages if already existing in offline storage ## 0.2.6 - Experimental support for Flutter web and MacOs ## 0.2.5+2 - Cleaned up Serialization on extra_data ## 0.2.5+1 - Fix `channel.show` api call ## 0.2.5 - Add `channelType` and `channelId` properties to event object ## 0.2.4+2 - Fix query members messing channel state ## 0.2.4+1 - Do not resync if there is no channel in offlinestorage ## 0.2.4 - Add null-safety to ws disconnect - Add pagination parameters to queryUsers request ## 0.2.3+3 - Fix reaction add/remove logic ## 0.2.3+2 - Skip system messages during unreadCount computation ## 0.2.3+1 - Removed moor_ffi from dependencies in favor of moor/ffi ## 0.2.3 - Fix reject invite payload - Add multi-tenant properties to channel and user ## 0.2.2+1 - Fix queryChannels payload ## 0.2.2 - Fix add/remove/invite members api calls ## 0.2.1 - Add `isMutedStream` to `Channel` - Add `isGroup` to `Channel` - Add `isDistinct` to `Channel` ## 0.2.0+2 - Fix search messages response class ## 0.2.0+1 - Fix offline members update - Add channel mutes - Fix default channel sort ## 0.2.0 - Add `lastMessage` getter to Channel.state - Add `isSystem` property to Message - Incremental websocket reconnection timeout - Add translate message api call - Add queryMembers api call - Add user list to client state - Synchronize channel members status - Add offline storage - Add push notifications helper functions ## 0.2.0-alpha+23 - Add `lastMessage` getter to `Channel.state` ## 0.2.0-alpha+22 - Add `isSystem` property to Message ## 0.2.0-alpha+21 - Incremental websocket reconnection timeout ## 0.2.0-alpha+20 - More robust offline storage insertions ## 0.2.0-alpha+19 - Add translate message api call - Add queryMembers api call ## 0.2.0-alpha+18 - Revert moor_ffi version to 0.5.0 ## 0.2.0-alpha+17 - Add user list to client - Synchronize channel members status ## 0.2.0-alpha+16 - Try QueryChannels when `resync` endpoint returns an error ## 0.2.0-alpha+15 - Fix receiving reactions ## 0.2.0-alpha+14 - Avoid sending local event for optimistic updates ## 0.2.0-alpha+13 - Fix offline on app first start up ## 0.2.0-alpha+12 - Fix retry mechanism in threads - Fix delete channel query ## 0.2.0-alpha+9 - Add retry mechanism and retry queue ## 0.2.0-alpha+8 - Add copyWith to Attachment ## 0.2.0-alpha+7 - Add channel deleted/updated event handling ## 0.2.0-alpha+6 - Align with stable release ## 0.2.0-alpha+5 - Rename client parameters ## 0.2.0-alpha+3 - Remove dependencies on notification service - Expose some helping method for integrate offline storage with push notifications ## 0.2.0-alpha+2 - Fix unread count ## 0.2.0-alpha - Offline storage - Push notifications - Minor bug fixes ## 0.1.30 - Add silent property to message ## 0.1.29 - Fix read event handling ## 0.1.28 - Fix bug clearing members when receiving a message ## 0.1.27 - Update dependencies ## 0.1.26 - Remove wrong `members` property from `ChannelModel` ## 0.1.25 - Fix online status ## 0.1.24 - Fix unread count ## 0.1.22 - Add mute/unmute channel ## 0.1.20 - Fix channel query path without id ## 0.1.19 - Fix loading message replies ## 0.1.18 - Export dio error ## 0.1.17 - Ignore current user typing events - Add event types ## 0.1.16 - Fix message update ## 0.1.15 - Fix mentions handling ## 0.1.14 - Handle message modification and commands ## 0.1.13 - Add message.updated event handling ## 0.1.12 - Add export multipart_file from dio ## 0.1.11 - Add channel config checks ## 0.1.10 - Rename Channel.channelClients to channels ## 0.1.9 - Fix channel update on message delete ## 0.1.8 - Add delete message handling ## 0.1.7 - Add reaction handling ## 0.1.6 - Add initialized completer - Update example ## 0.1.5 - Add `ClientState` and `ChannelClientState` classes to handle channel state updates using events - Update example supporting threads ## 0.1.4 - Update some api with wrong or incomplete signatures - Add documentation for public apis ## 0.1.2 - add websocket reconnection logic - add token expiration mechanism ## 0.1.1 - add typing events handling ## 0.1.0 - a better example can be found in the example/ directory - fix some api calls and add missing one ## 0.0.2 - first beta version