loadNext method Null safety

  1. @override
Future<List<GroupChannel>> loadNext()
override

Load next items asynchronously

Implementation

@override
Future<List<GroupChannel>> loadNext() async {
  if (loading) throw QueryInProgressError();
  if (!hasNext) return [];

  loading = true;

  final filter = GroupChannelFilter()
    ..customTypeStartswith = customTypeStartWith
    ..customTypes = customTypes
    ..memberStateFilter = memberStateFilter
    ..membersExactlyIn = userIdsExactlyIn
    ..membersIncludeIn = userIdsIncludeIn
    ..membersNicknameContains = nicknameContains
    ..nameContains = channelNameContains
    ..superMode = superChannelFilter
    ..publicMode = publicChannelFilter
    ..unreadFilter = unreadChannelFilter
    ..metadataOrderKey = metaDataOrderKeyFilter
    ..hiddenMode = channelHiddenStateFilter
    ..metaDataKey = metaDataKeyFilter
    ..metaDataValues = metaDataValuesFilter
    ..metaDataValueStartWithFilter = metaDataValueStartWithFilter;

  final options = [
    if (includeFrozenChannel) ChannelQueryIncludeOption.frozenChannel,
    if (includeEmptyChannel) ChannelQueryIncludeOption.emptyChannel,
    if (includeMemberList) ChannelQueryIncludeOption.memberList,
    if (includeMetaData) ChannelQueryIncludeOption.metaData,
    ChannelQueryIncludeOption.readReceipt,
    ChannelQueryIncludeOption.deliveryReceipt,
  ];

  final sdk = SendbirdSdk().getInternal();
  final res = await sdk.api.send<ChannelListQueryResponse<GroupChannel>>(
    GroupChannelListRequest(
      filter: filter,
      options: options,
      queryType: queryType,
      token: token,
      limit: limit,
      order: order,
      channelUrls: channelUrls,
      searchFields: searchFields,
      searchQuery: searchQuery,
    ),
  );

  loading = false;
  token = res.next;
  hasNext = res.next != '';
  return res.channels;
}