dismissSideSheet static method
Dismisses the active side sheet (if any)
This method handles the complete dismissal lifecycle of a side sheet:
- Animates the side sheet sliding out
- Runs onDismissed callback
- Cleans up internal state
- Preserves other active modals (dialogs, snackbars, bottom sheets)
If an id is provided, dismissal only occurs if the active side sheet
matches that ID.
Example:
// Dismiss any active side sheet
Modal.dismissSideSheet();
// Dismiss specific side sheet by ID (recommended)
Modal.dismissSideSheet(id: 'menu_sheet');
Implementation
static Future<void> dismissSideSheet({
String? id,
VoidCallback? onDismissed,
}) async {
// Side sheets now use the sheet controller
// Check if the active sheet is actually a side sheet (has sheetPosition left/right)
if (Modal.isSheetActive && !Modal.isSheetDismissing) {
final content = _sheetController.state;
final isSideSheet = content?.sheetPosition == SheetPosition.left ||
content?.sheetPosition == SheetPosition.right;
if (!isSideSheet) {
if (_showDebugPrints) {
debugPrint(
'Modal.dismissSideSheet: Active bottom sheet is not a side sheet. Aborting.',
);
}
return;
}
// Call the unified dismiss method
await dismissBottomSheet(id: id, onDismissed: onDismissed);
} else {
if (_showDebugPrints) {
debugPrint(
'Modal.dismissSideSheet: No side sheet active or already dismissing',
);
}
}
}