show<T> static method
Future<T?>
show<T>({
- required BuildContext context,
- required WidgetBuilder builder,
- bool closeOnBarrierTap = false,
- 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,
),
);
}