queryUsers method

Future<void> queryUsers({
  1. Filter? filter,
  2. List<SortOption>? sort,
  3. bool? presence,
  4. PaginationParams pagination = const PaginationParams(limit: 30),
})

The Query Users method allows you to search for users and see if they are online/offline. API Reference

Implementation

Future<void> queryUsers({
  Filter? filter,
  List<SortOption>? sort,
  bool? presence,
  PaginationParams pagination = const PaginationParams(limit: 30),
}) async {
  final client = _streamChatCore.client;

  final offset = pagination.offset;
  final clear = offset == null || offset == 0;

  if (clear && _paginationEnded) {
    _paginationEnded = false;
  }

  if ((!clear && _paginationEnded) || _queryUsersLoadingController.value) {
    return;
  }

  if (_usersController.hasValue) {
    _queryUsersLoadingController.safeAdd(true);
  }

  try {
    final oldUsers = List<User>.from(users ?? []);

    final usersResponse = await client.queryUsers(
      filter: filter,
      sort: sort,
      presence: presence,
      pagination: pagination,
    );

    final newUsers = usersResponse.users;
    if (clear) {
      _usersController.safeAdd(usersResponse.users);
    } else {
      final temp = oldUsers + usersResponse.users;
      _usersController.safeAdd(temp);
    }
    if (_usersController.hasValue && _queryUsersLoadingController.value) {
      _queryUsersLoadingController.safeAdd(false);
    }
    if (newUsers.isEmpty || newUsers.length < pagination.limit) {
      _paginationEnded = true;
    }
  } catch (e, stk) {
    // reset loading controller
    _queryUsersLoadingController.safeAdd(false);
    if (_usersController.hasValue) {
      _queryUsersLoadingController.safeAddError(e, stk);
    } else {
      _usersController.safeAddError(e, stk);
    }
  }
}