diff --git a/packages/stream_chat_flutter_core/CHANGELOG.md b/packages/stream_chat_flutter_core/CHANGELOG.md index 3d6aa989..edd187dc 100644 --- a/packages/stream_chat_flutter_core/CHANGELOG.md +++ b/packages/stream_chat_flutter_core/CHANGELOG.md @@ -1,8 +1,15 @@ ## Upcoming +🐞 Fixed + - [#1269](https://github.com/GetStream/stream-chat-flutter/issues/1269) Fix `ChannelListEventHandler` castError at PagedValue.asSuccess. +✅ Added + +- Added setters to update `ChannelListController.filter` and `ChannelListController.sort` properties + in order to support runtime changes. + ## 4.4.1 - Updated `stream_chat` dependency to [`4.4.1`](https://pub.dev/packages/stream_chat/changelog). diff --git a/packages/stream_chat_flutter_core/lib/src/stream_channel_list_controller.dart b/packages/stream_chat_flutter_core/lib/src/stream_channel_list_controller.dart index bea403be..484b1f22 100644 --- a/packages/stream_chat_flutter_core/lib/src/stream_channel_list_controller.dart +++ b/packages/stream_chat_flutter_core/lib/src/stream_channel_list_controller.dart @@ -50,7 +50,9 @@ class StreamChannelListController extends PagedValueNotifier { this.limit = defaultChannelPagedLimit, this.messageLimit, this.memberLimit, - }) : _eventHandler = eventHandler ?? StreamChannelListEventHandler(), + }) : _activeFilter = filter, + _activeSort = sort, + _eventHandler = eventHandler ?? StreamChannelListEventHandler(), super(const PagedValue.loading()); /// Creates a [StreamChannelListController] from the passed [value]. @@ -64,7 +66,9 @@ class StreamChannelListController extends PagedValueNotifier { this.limit = defaultChannelPagedLimit, this.messageLimit, this.memberLimit, - }) : _eventHandler = eventHandler ?? StreamChannelListEventHandler(); + }) : _activeFilter = filter, + _activeSort = sort, + _eventHandler = eventHandler ?? StreamChannelListEventHandler(); /// The client to use for the channels list. final StreamChatClient client; @@ -78,6 +82,7 @@ class StreamChannelListController extends PagedValueNotifier { /// /// You can also filter other built-in channel fields. final Filter? filter; + Filter? _activeFilter; /// The sorting used for the channels matching the filters. /// @@ -89,6 +94,7 @@ class StreamChannelListController extends PagedValueNotifier { /// /// Direction can be ascending or descending. final List>? sort; + List>? _activeSort; /// If true you’ll receive user presence updates via the websocket events final bool presence; @@ -103,6 +109,18 @@ class StreamChannelListController extends PagedValueNotifier { /// Number of members to fetch in each channel. final int? memberLimit; + /// Allows for the change of filters used for channel queries. + /// + /// Use this if you need to support runtime filter changes, + /// through custom filters UI. + set filter(Filter? value) => _activeFilter = value; + + /// Allows for the change of sort used for channel queries. + /// + /// Use this if you need to support runtime sort changes, + /// through custom sort UI. + set sort(List>? value) => _activeSort = value; + @override Future doInitialLoad() async { final limit = min( @@ -111,8 +129,8 @@ class StreamChannelListController extends PagedValueNotifier { ); try { await for (final channels in client.queryChannels( - filter: filter, - sort: sort, + filter: _activeFilter, + sort: _activeSort, memberLimit: memberLimit, messageLimit: messageLimit, presence: presence, @@ -140,8 +158,8 @@ class StreamChannelListController extends PagedValueNotifier { try { await for (final channels in client.queryChannels( - filter: filter, - sort: sort, + filter: _activeFilter, + sort: _activeSort, memberLimit: memberLimit, messageLimit: messageLimit, presence: presence, @@ -163,6 +181,15 @@ class StreamChannelListController extends PagedValueNotifier { } } + @override + Future refresh({bool resetValue = true}) { + if (resetValue) { + _activeFilter = filter; + _activeSort = sort; + } + return super.refresh(resetValue: resetValue); + } + /// Replaces the previously loaded channels with [channels] and updates /// the nextPageKey. set channels(List channels) {