openDetail static method

Future<void> openDetail(
  1. BuildContext context, {
  2. required WidgetBuilder builder,
  3. String? title,
  4. FuiCompactDetailPresentation compactPresentation = FuiCompactDetailPresentation.auto,
  5. FuiNavigationBreakpoints breakpoints = const FuiNavigationBreakpoints(),
  6. bool fullscreenDialog = false,
  7. bool barrierDismissible = true,
  8. bool preferSecondaryPane = true,
  9. bool useSafeArea = true,
})

Implementation

static Future<void> openDetail(
  BuildContext context, {
  required WidgetBuilder builder,
  String? title,
  FuiCompactDetailPresentation compactPresentation =
      FuiCompactDetailPresentation.auto,
  FuiNavigationBreakpoints breakpoints = const FuiNavigationBreakpoints(),
  bool fullscreenDialog = false,
  bool barrierDismissible = true,
  bool preferSecondaryPane = true,
  bool useSafeArea = true,
}) async {
  final detailBuilder = useSafeArea
      ? (BuildContext context) =>
            FuiNavigationContent(child: Builder(builder: builder))
      : builder;
  final scope = _FuiNavigationScope.maybeOf(context);
  if (preferSecondaryPane && scope?.layout == FuiNavigationLayout.split) {
    await scope!.showSecondary(
      detailBuilder,
      replace: !FuiNavigation.isSecondaryPane(context),
    );
    return;
  }
  final resolvedPresentation = _resolveDetailPresentation(
    compactPresentation,
  );
  switch (resolvedPresentation) {
    case FuiCompactDetailPresentation.auto:
      throw StateError('FuiCompactDetailPresentation.auto was not resolved.');
    case FuiCompactDetailPresentation.push:
      await Navigator.of(context).push<void>(
        FuiPageRoute<void>(
          fullscreenDialog: fullscreenDialog,
          builder: detailBuilder,
        ),
      );
    case FuiCompactDetailPresentation.bottomSheet:
      await showModalBottomSheet<void>(
        context: context,
        isScrollControlled: true,
        useSafeArea: useSafeArea,
        builder: (context) => FractionallySizedBox(
          heightFactor: 0.88,
          child: Builder(builder: builder),
        ),
      );
    case FuiCompactDetailPresentation.dialog:
      await showDialog<void>(
        context: context,
        barrierDismissible: barrierDismissible,
        builder: (context) => Dialog(
          clipBehavior: Clip.antiAlias,
          child: ConstrainedBox(
            constraints: const BoxConstraints(maxWidth: 720, maxHeight: 720),
            child: Builder(builder: builder),
          ),
        ),
      );
  }
}