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 trueparameters
: 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
-
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