search method
Future<void>
search({
- required Filter filter,
- Filter? messageFilter,
- List<
SortOption> ? sort, - String? query,
- PaginationParams pagination = const PaginationParams(limit: 30),
Calls StreamChatClient.search updating messagesStream and queryMessagesLoading stream
Implementation
Future<void> search({
required Filter filter,
Filter? messageFilter,
List<SortOption>? sort,
String? query,
PaginationParams pagination = const PaginationParams(limit: 30),
}) async {
final client = _streamChatCoreState.client;
var clear = false;
if (sort != null) {
clear |= pagination.next == null;
} else {
final offset = pagination.offset;
clear |= offset == null || offset == 0;
}
if (clear && _paginationEnded) {
_paginationEnded = false;
}
if ((!clear && _paginationEnded) || _queryMessagesLoadingController.value) {
return;
}
if (_messageResponses.hasValue) {
_queryMessagesLoadingController.safeAdd(true);
}
try {
final oldMessages = List<GetMessageResponse>.from(messageResponses ?? []);
final response = await client.search(
filter,
sort: sort,
query: query,
paginationParams: pagination,
messageFilters: messageFilter,
);
final next = response.next;
final previous = response.previous;
nextId = next != null && next.isNotEmpty
? next
: /*reset nextId if we get nothing*/ null;
previousId = previous != null && previous.isNotEmpty
? previous
: /*reset previousId if we get nothing*/ null;
final newMessages = response.results;
if (clear) {
_messageResponses.safeAdd(newMessages);
} else {
final temp = oldMessages + newMessages;
_messageResponses.safeAdd(temp);
}
if (_messageResponses.hasValue && _queryMessagesLoadingController.value) {
_queryMessagesLoadingController.safeAdd(false);
}
if (newMessages.isEmpty || newMessages.length < pagination.limit) {
_paginationEnded = true;
}
} catch (e, stk) {
// reset loading controller
_queryMessagesLoadingController.safeAdd(false);
if (_messageResponses.hasValue) {
_queryMessagesLoadingController.safeAddError(e, stk);
} else {
_messageResponses.safeAddError(e, stk);
}
}
}