dismissSideSheet static method

Future<void> dismissSideSheet({
  1. String? id,
  2. VoidCallback? onDismissed,
})

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',
      );
    }
  }
}