showSideSheet<T> static method

Future<T?> showSideSheet<T>(
  1. BuildContext context,
  2. TModalWidgetBuilder<T> builder, {
  3. TModalWidgetBuilder? header,
  4. TModalWidgetBuilder? footer,
  5. bool persistent = false,
  6. double width = 400,
  7. double minWidth = 280,
  8. String? title,
  9. String? subTitle,
  10. bool? showCloseButton,
  11. TSheetAnimationType animationType = TSheetAnimationType.sliding,
  12. bool fromLeft = false,
  13. Color? backgroundColor,
  14. BorderRadius? borderRadius,
  15. Widget layoutBuilder(
    1. BuildContext context,
    2. Widget child
    )?,
  16. Duration transitionDuration = const Duration(milliseconds: 250),
  17. Color barrierColor = Colors.black54,
})

Implementation

static Future<T?> showSideSheet<T>(
  BuildContext context,
  TModalWidgetBuilder<T> builder, {
  TModalWidgetBuilder? header,
  TModalWidgetBuilder? footer,
  bool persistent = false,
  double width = 400,
  double minWidth = 280,
  String? title,
  String? subTitle,
  bool? showCloseButton,
  TSheetAnimationType animationType = TSheetAnimationType.sliding,
  bool fromLeft = false,
  Color? backgroundColor,
  BorderRadius? borderRadius,
  Widget Function(BuildContext context, Widget child)? layoutBuilder,
  Duration transitionDuration = const Duration(milliseconds: 250),
  Color barrierColor = Colors.black54,
}) {
  return showGeneralDialog<T>(
    context: context,
    barrierDismissible: !persistent,
    barrierLabel: 'SideSheet',
    barrierColor: barrierColor,
    transitionDuration: transitionDuration,
    pageBuilder: (context, animation, secondaryAnimation) {
      final mContext = TModalContext<T>(context);
      return Align(
        alignment: fromLeft ? Alignment.centerLeft : Alignment.centerRight,
        child: Material(
          color: Colors.transparent,
          child: TSideSheet(
            builder(mContext),
            header: header?.call(mContext),
            footer: footer?.call(mContext),
            title: title,
            subTitle: subTitle,
            showCloseButton: showCloseButton ?? !persistent,
            onClose: () => Navigator.of(context).pop(),
            width: width,
            minWidth: minWidth,
            fromLeft: fromLeft,
            persistent: persistent,
            backgroundColor: backgroundColor,
            borderRadius: borderRadius,
            layoutBuilder: layoutBuilder,
          ),
        ),
      );
    },
    transitionBuilder: (context, animation, secondaryAnimation, child) {
      final curvedAnimation = CurvedAnimation(
        parent: animation,
        curve: Curves.easeOutCubic,
        reverseCurve: Curves.easeInCubic,
      );
      if (animationType == TSheetAnimationType.drawing) {
        return SizeTransition(
          sizeFactor: curvedAnimation,
          axis: Axis.horizontal,
          axisAlignment: fromLeft ? -1 : 1,
          child: child,
        );
      } else {
        return SlideTransition(
          position: Tween<Offset>(
            begin: Offset(fromLeft ? -1 : 1, 0),
            end: Offset.zero,
          ).animate(curvedAnimation),
          child: child,
        );
      }
    },
  );
}