feat(core): Add ChannelListController.filter and ChannelListController.sort setters.

Signed-off-by: xsahil03x <[email protected]>
This commit is contained in:
Sahil Kumar
2022-08-16 15:27:11 +05:30
committed by xsahil03x
parent 6afde872e5
commit 10fffc335f
2 changed files with 40 additions and 6 deletions
@@ -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).
@@ -50,7 +50,9 @@ class StreamChannelListController extends PagedValueNotifier<int, Channel> {
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<int, Channel> {
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<int, Channel> {
///
/// 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<int, Channel> {
///
/// Direction can be ascending or descending.
final List<SortOption<ChannelModel>>? sort;
List<SortOption<ChannelModel>>? _activeSort;
/// If true youll receive user presence updates via the websocket events
final bool presence;
@@ -103,6 +109,18 @@ class StreamChannelListController extends PagedValueNotifier<int, Channel> {
/// 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<SortOption<ChannelModel>>? value) => _activeSort = value;
@override
Future<void> doInitialLoad() async {
final limit = min(
@@ -111,8 +129,8 @@ class StreamChannelListController extends PagedValueNotifier<int, Channel> {
);
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<int, Channel> {
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<int, Channel> {
}
}
@override
Future<void> 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<Channel> channels) {