handleClick method

Future<void> handleClick(
  1. int page,
  2. int offSet
)

Implementation

Future<void> handleClick(int page, int offSet) async {
  if (page == options.currentUserPage) {
    return;
  }
  PaginationParameters parameters = options.parameters;
  final PaginationParameters updatedParameters =
      parameters.getUpdatedAllParams();
  parameters = updatedParameters;

  var breakOutRoomStarted = parameters.breakOutRoomStarted;
  var breakOutRoomEnded = parameters.breakOutRoomEnded;
  var member = parameters.member;
  var breakoutRooms = parameters.breakoutRooms;
  var hostNewRoom = parameters.hostNewRoom;
  var roomName = parameters.roomName;
  var islevel = parameters.islevel;
  var showAlert = parameters.showAlert;
  var socket = parameters.socket;

  if (breakOutRoomStarted && !breakOutRoomEnded && page != 0) {
    final roomMember = breakoutRooms.firstWhere(
      (r) => r.any((p) => p.name == member),
      orElse: () => [BreakoutParticipant(name: '')],
    );
    final pageInt = page - offSet;
    int memberBreakRoom = -1;

    if (roomMember.isNotEmpty && roomMember.first.name == member) {
      memberBreakRoom = breakoutRooms.indexOf(roomMember);
    }

    if ((memberBreakRoom == -1 || memberBreakRoom != pageInt) &&
        pageInt >= 0) {
      if (islevel != '2') {
        showAlert!(
          message: 'You are not part of the breakout room ${pageInt + 1}.',
          type: 'danger',
          duration: 3000,
        );
        return;
      }

      final optionsHandlePageChange = GeneratePageContentOptions(
        parameters: parameters,
        page: page,
        breakRoom: pageInt,
        inBreakRoom: true,
      );
      await options.handlePageChange(
        optionsHandlePageChange,
      );

      if (hostNewRoom != pageInt) {
        socket!.emitWithAck(
            'updateHostBreakout', {'newRoom': pageInt, 'roomName': roomName},
            ack: (response) async {});
      }
    } else {
      final optionsHandlePageChange = GeneratePageContentOptions(
        page: page,
        parameters: parameters,
        breakRoom: pageInt,
        inBreakRoom: pageInt >= 0,
      );
      await options.handlePageChange(
        optionsHandlePageChange,
      );

      if (islevel == '2' && hostNewRoom != -1) {
        socket!.emitWithAck('updateHostBreakout',
            {'prevRoom': hostNewRoom, 'newRoom': -1, 'roomName': roomName},
            ack: (response) async {});
      }
    }
  } else {
    final optionsHandlePageChange = GeneratePageContentOptions(
      page: page,
      parameters: parameters,
      breakRoom: 0,
      inBreakRoom: false,
    );
    await options.handlePageChange(
      optionsHandlePageChange,
    );

    if (islevel == '2' && hostNewRoom != -1) {
      socket!.emitWithAck('updateHostBreakout',
          {'prevRoom': hostNewRoom, 'newRoom': -1, 'roomName': roomName},
          ack: (response) async {});
    }
  }
}