next method

  1. @override
Future<List<BaseMessage>> next()
override

Gets the list of next items.

Implementation

@override
Future<List<BaseMessage>> next() async {
  sbLog.i(StackTrace.current);

  if (isLoading) throw QueryInProgressException();
  if (!hasNext) return [];

  isLoading = true;

  final params = MessageListParams()
    ..previousResultSize = limit
    ..reverse = reverse
    ..messageType = messageTypeFilter
    ..customTypes = customTypesFilter
    ..senderIds = senderIdsFilter
    ..showSubChannelMessagesOnly = showSubChannelMessagesOnly
    // BaseMessageFetchParams
    ..includeMetaArray = includeMetaArray
    ..includeReactions = includeReactions
    ..includeThreadInfo = includeThreadInfo
    ..includeParentMessageInfo = includeParentMessageInfo
    ..replyType = replyType;

  List<BaseMessage> messages;
  try {
    final res = await chat.apiClient.send<ChannelMessagesGetResponse>(
      ChannelMessagesGetRequest(
        chat,
        channelType: channelType,
        channelUrl: channelUrl,
        params: params.toJson(),
        timestamp: messageTimestamp ?? 0,
      ),
    );
    messages = List<BaseMessage>.from(res.messages);

    if (messages.isNotEmpty) {
      final oldestMessage = reverse ? messages.last : messages.first;
      messageTimestamp = oldestMessage.createdAt;
    } else {
      messageTimestamp = null;
    }

    hasNext = messages.length == limit;
  } catch (_) {
    isLoading = false;
    rethrow;
  }

  isLoading = false;
  return messages;
}