show<T> static method

Future<T?> show<T>(
  1. BuildContext context, {
  2. DeviceDetails? initial,
  3. void onSelected(
    1. DeviceDetails
    )?,
})

Displays a OutputRouteView wrapped in a ModalPopup.

Implementation

static Future<T?> show<T>(
  BuildContext context, {
  DeviceDetails? initial,
  void Function(DeviceDetails)? onSelected,
}) async {
  final style = Theme.of(context).style;

  final route = RawDialogRoute<T?>(
    barrierColor: style.barrierColor,
    barrierDismissible: true,
    pageBuilder: (_, _, _) {
      final Widget body = Center(
        child: Container(
          constraints: const BoxConstraints(maxWidth: 380),
          width: 380,
          margin: const EdgeInsets.symmetric(horizontal: 10, vertical: 10),
          decoration: BoxDecoration(
            color: style.colors.background,
            borderRadius: BorderRadius.circular(16),
          ),
          child: OutputRouteView(initial: initial, onSelected: onSelected),
        ),
      );

      return CustomSafeArea(
        child: Material(type: MaterialType.transparency, child: body),
      );
    },
    barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel,
    transitionDuration: const Duration(milliseconds: 300),
    transitionBuilder: (_, Animation<double> animation, _, Widget child) {
      return FadeTransition(
        opacity: CurvedAnimation(parent: animation, curve: Curves.linear),
        child: child,
      );
    },
  );

  router.obscuring.add(route);

  try {
    return await Navigator.of(context, rootNavigator: true).push<T?>(route);
  } finally {
    router.obscuring.remove(route);
  }
}