show<T> static method
Future<T?>
show<T>(
- BuildContext context, {
- required WidgetBuilder builder,
- UiControlledDrawerBuilder<
T> ? controlledBuilder, - UiDrawerSide side = UiDrawerSide.start,
- UiDrawerVariant variant = UiDrawerVariant.standard,
- bool barrierDismissible = true,
- bool? blurBackdrop,
- Color? barrierColor,
Present a modal drawer from side. Returns the result passed to
Navigator.maybePop.
Implementation
static Future<T?> show<T>(
BuildContext context, {
required WidgetBuilder builder,
UiControlledDrawerBuilder<T>? controlledBuilder,
UiDrawerSide side = UiDrawerSide.start,
UiDrawerVariant variant = UiDrawerVariant.standard,
bool barrierDismissible = true,
bool? blurBackdrop,
Color? barrierColor,
}) {
final nested = UiDrawerNavigator.maybeOf(context);
if (nested != null) {
return nested.push<T>(
builder: builder,
controlledBuilder: controlledBuilder,
side: side,
variant: variant,
);
}
final tokens = UiThemeTokens.of(context);
final direction = Directionality.of(context);
final effectiveBlurBackdrop =
blurBackdrop ?? variant != UiDrawerVariant.standard;
final navigator = Navigator.of(context, rootNavigator: true);
final drawerTransitionDuration = UiStackedMotion.drawerDuration.resolve(
context,
);
final capturedThemes = InheritedTheme.capture(
from: context,
to: navigator.context,
);
final route = navigator.push<T>(
PageRouteBuilder<T>(
opaque: false,
barrierDismissible: false,
barrierColor: const Color(0x00000000),
transitionDuration: drawerTransitionDuration,
reverseTransitionDuration: drawerTransitionDuration,
pageBuilder: (ctx, animation, __) {
return capturedThemes.wrap(
UiScrollConfiguration(
child: _DrawerRouteHost(
animation: animation,
side: side,
variant: variant,
direction: direction,
builder: builder,
controlledBuilder: _eraseControlledBuilder(controlledBuilder),
blurBackdrop: effectiveBlurBackdrop,
barrierColor: barrierColor ?? tokens.colors.overlay,
barrierDismissible: barrierDismissible,
transitionDuration: drawerTransitionDuration,
onDismissRoute: ([result]) {
Navigator.of(ctx).maybePop(result);
},
),
),
);
},
transitionsBuilder: (_, __, ___, child) => child,
),
);
return route;
}