PaginationOptions class

Configuration options for the Pagination widget.

Defines pagination behavior for navigating between main room and breakout rooms in video conferencing. Supports role-based access control (host vs. participant), locked room indicators, and socket-based room switching with server synchronization.

Properties:

  • totalPages: Total number of pages (0 = main room, 1+ = participant pages or breakout rooms)
  • currentUserPage: Active page index (0-based)
  • handlePageChange: Callback invoked when page changes (defaults to generatePageContent)
  • position: Horizontal alignment of pagination within container ('left', 'middle', 'right'). Defaults to 'middle'
  • location: Vertical position hint ('top', 'bottom'). Used for positioning context. Defaults to 'bottom'
  • direction: Layout direction ('horizontal' for row, 'vertical' for column). Defaults to 'horizontal'
  • buttonsContainerStyle: BoxConstraints for individual page buttons (e.g., BoxConstraints.tightFor(width: 60, height: 40))
  • alternateIconComponent: Custom widget for alternate page indicator (currently unused in default implementation)
  • iconComponent: Custom widget for page 0 home icon (overrides default star icon)
  • activePageColor: Background color for selected page button (defaults to Color(0xFF2c678f) - blue)
  • inactivePageColor: Background color for unselected page buttons (defaults to null = transparent)
  • backgroundColor: Background color for entire pagination container (defaults to Color(0xFFFFFFFF) - white)
  • paginationHeight: Maximum height (horizontal mode) or width (vertical mode) in pixels (defaults to 40.0)
  • showAspect: Visibility flag (true = show pagination; false = hide). Defaults to true
  • parameters: PaginationParameters providing room state, socket, user level, alerts (required)
  • containerBuilder: Hook to wrap entire pagination container (receives listView, pages list)
  • pageButtonBuilder: Hook to customize individual page button (receives page, isActive, isLocked, content, onSelect callback)
  • pageContentBuilder: Hook to customize button content (receives page, isActive, isLocked, label, defaultContent)

Page Number Interpretation:

Page 0: Main room (always accessible, displayed as star icon)
Page 1 to mainRoomsLength-1: Regular participant pages (if mainRoomsLength > 1)
Page mainRoomsLength+: Breakout rooms (labeled "Room N", locked if not member)

Breakout Room Number = page - (mainRoomsLength - 1)

Locked Room Display Logic:

if (breakOutRoomStarted && !breakOutRoomEnded && page >= mainRoomsLength) {
  roomNumber = page - (mainRoomsLength - 1);
  if (memberRoom + 1 != roomNumber && islevel != '2') {
    label = "Room {roomNumber} 🔒"; // locked for non-host participants
    isLocked = true;
  } else {
    label = "Room {roomNumber}"; // unlocked (member or host)
  }
} else {
  label = page.toString(); // numeric label outside breakout session
}

Builder Hook Flow:

1. Determine page state (isActive, isHomePage, isLocked, displayLabel)
2. Create baseContent (star icon for page 0, Text for others)
3. pageContentBuilder?(baseContent) → resolvedContent
4. Wrap resolvedContent in GestureDetector + Container → defaultButton
5. pageButtonBuilder?(resolvedContent, defaultButton, onSelect) → final button
6. Build ListView with all page buttons
7. Wrap ListView in Container with styling
8. containerBuilder?(listView, defaultContainer) → final container
9. Wrap in Visibility(showAspect)

Common Configurations:

// 1. Basic horizontal pagination (5 pages)
PaginationOptions(
  totalPages: 5,
  currentUserPage: 0,
  parameters: parameters,
  activePageColor: Colors.blue,
  inactivePageColor: Colors.grey[300],
  backgroundColor: Colors.white,
)

// 2. Vertical sidebar pagination
PaginationOptions(
  totalPages: 10,
  currentUserPage: 2,
  direction: 'vertical',
  parameters: parameters,
  paginationHeight: 80, // width in vertical mode
  position: 'left',
)

// 3. Breakout room pagination (4 main rooms + 3 breakout rooms)
PaginationOptions(
  totalPages: 7, // 0 (main) + 1-3 (participants) + 4-6 (breakout rooms 1-3)
  currentUserPage: 0,
  parameters: parameters, // with mainRoomsLength=4, memberRoom=0, breakOutRoomStarted=true
  activePageColor: Colors.green,
  inactivePageColor: Colors.grey[200],
)
// Result: Page 0 = star, Page 1-3 = "1", "2", "3", Page 4-6 = "Room 1", "Room 2", "Room 3" (locked if not member)

// 4. Custom page button styling
PaginationOptions(
  totalPages: 5,
  currentUserPage: 1,
  parameters: parameters,
  buttonsContainerStyle: BoxConstraints.tightFor(width: 50, height: 50),
  pageButtonBuilder: (context) {
    return Container(
      margin: EdgeInsets.all(8),
      decoration: BoxDecoration(
        color: context.isActive ? Colors.blue : Colors.white,
        shape: BoxShape.circle,
        border: Border.all(color: Colors.blue, width: 2),
        boxShadow: context.isActive
            ? [BoxShadow(color: Colors.blue.withOpacity(0.5), blurRadius: 8)]
            : [],
      ),
      child: Center(child: context.content),
    );
  },
)

Typical Use Cases:

  • Video conference participant pagination
  • Breakout room navigation with access control
  • Multi-page gallery view
  • Room-based content switching
  • Host-controlled breakout session management

Constructors

PaginationOptions({required int totalPages, required int currentUserPage, GeneratePageContentType handlePageChange = generatePageContent, String position = 'middle', String location = 'bottom', String direction = 'horizontal', BoxConstraints? buttonsContainerStyle, Widget? alternateIconComponent, Widget? iconComponent, Color activePageColor = const Color(0xFF2c678f), Color? inactivePageColor, Color backgroundColor = const Color(0xFFFFFFFF), double paginationHeight = 40.0, bool showAspect = true, required PaginationParameters parameters, PaginationContainerBuilder? containerBuilder, PaginationPageButtonBuilder? pageButtonBuilder, PaginationPageContentBuilder? pageContentBuilder})

Properties

activePageColor → Color
final
alternateIconComponent → Widget?
final
backgroundColor → Color
final
buttonsContainerStyle → BoxConstraints?
final
containerBuilder → PaginationContainerBuilder?
final
currentUserPage → int
final
direction → String
final
handlePageChange → GeneratePageContentType
final
hashCode → int
The hash code for this object.
no setterinherited
iconComponent → Widget?
final
inactivePageColor → Color?
final
location → String
final
pageButtonBuilder → PaginationPageButtonBuilder?
final
pageContentBuilder → PaginationPageContentBuilder?
final
paginationHeight → double
final
parameters → PaginationParameters
final
position → String
final
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
showAspect → bool
final
totalPages → int
final

Methods

noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited