show<T> static method

Future<T?> show<T>({
  1. required BuildContext context,
  2. required WidgetBuilder builder,
  3. bool closeOnBarrierTap = false,
  4. DsDialogPlacement placement = DsDialogPlacement.center,
})

Viser DsDialog som en modal rute over gjeldende skjerm.

closeOnBarrierTap styrer om et klikk utenfor dialogen lukker den. Standard er false, i tråd med offisiell Designsystemet der en modal dialog uten closedby kun lukkes med Escape eller en eksplisitt handling. placement styrer plasseringen på skjermen.

Implementation

static Future<T?> show<T>({
  required BuildContext context,
  required WidgetBuilder builder,
  bool closeOnBarrierTap = false,
  DsDialogPlacement placement = DsDialogPlacement.center,
}) {
  // The dialog is built below the [Navigator], outside the caller's subtree,
  // so capture the inherited Designsystemet themes/scopes (DsTheme,
  // DsColorScope, DsSizeScope — all [InheritedTheme]) and re-apply them inside
  // the route. Without this, a dialog under `MaterialApp(home: DsTheme(...))`
  // would lose its tokens across the route boundary.
  final navigator = Navigator.of(context);
  final capturedThemes = InheritedTheme.capture(
    from: context,
    to: navigator.context,
  );
  return navigator.push<T>(
    _DsDialogRoute<T>(
      builder: (routeContext) => capturedThemes.wrap(builder(routeContext)),
      closeOnBarrierTap: closeOnBarrierTap,
      placement: placement,
    ),
  );
}