presentBottomSheet<T> function

Future<T?> presentBottomSheet<T>({
  1. required BuildContext context,
  2. required WidgetBuilder builder,
  3. double scrollControlDisabledMaxHeightRatio = 1,
  4. Color? backgroundColor,
  5. Color? barrierColor,
  6. BoxBorder? border,
  7. bool useSafeArea = true,
  8. BorderRadius? borderRadius,
  9. WidgetBuilder? iconBuilder,
  10. GlobalKey<NavigatorState>? navigatorKey,
})

Implementation

Future<T?> presentBottomSheet<T>({
  required BuildContext context,
  required WidgetBuilder builder,
  double scrollControlDisabledMaxHeightRatio = 1,
  Color? backgroundColor,
  Color? barrierColor,
  BoxBorder? border,
  bool useSafeArea = true,
  BorderRadius? borderRadius,
  WidgetBuilder? iconBuilder,
  GlobalKey<NavigatorState>? navigatorKey,
}) {
  return showModalBottomSheet<T>(
    context: navigatorKey?.currentContext ?? context,
    backgroundColor: backgroundColor,
    scrollControlDisabledMaxHeightRatio: scrollControlDisabledMaxHeightRatio,
    barrierColor: barrierColor,
    useSafeArea: useSafeArea,
    useRootNavigator: true,
    // isScrollControlled: true,
    builder: (innerContext) {
      return BackdropFilter(
        filter: ImageFilter.blur(sigmaX: 20, sigmaY: 20),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            Flexible(
              child: Container(
                decoration: BoxDecoration(
                  color: backgroundColor,
                  border: border,
                  borderRadius: borderRadius,
                ),
                clipBehavior: Clip.hardEdge,
                // elevation: 2,
                child: SafeArea(
                  child: Stack(children: [
                    Padding(
                      padding: EdgeInsets.only(
                          bottom: MediaQuery.viewInsetsOf(innerContext).bottom),
                      child: builder(innerContext),
                    ),
                    if (iconBuilder != null)
                      Positioned(
                        top: 24,
                        right: 20,
                        child: InkWell(
                          onTap: () {
                            Navigator.maybePop(innerContext);
                          },
                          borderRadius: BorderRadius.circular(12),
                          child: Container(
                            height: 24,
                            width: 24,
                            decoration: BoxDecoration(
                                borderRadius: BorderRadius.circular(12),
                                color: Colors.white.withValues(alpha: 0.1)),
                            child: iconBuilder(innerContext),
                          ),
                        ),
                      ),
                  ]),
                ),
              ),
            ),
          ],
        ),
      );
    },
  );
}