buildByMaterial method

  1. @override
Widget buildByMaterial(
  1. BuildContext context
)

build on material mode

Implementation

@override
Widget buildByMaterial(BuildContext context) {
  final VoidCallback? onClosingCallback = valueOf('onClosing', onClosing);
  final ThemeData theme = Theme.of(context);
  final ColorScheme colorScheme = theme.colorScheme;

  return BottomSheet(
    animationController: valueOf('animationController', animationController),
    onClosing: () {
      if (onClosingCallback != null) {
        onClosingCallback();
      }
    },
    builder: (BuildContext context) {
      return Container(
        decoration: BoxDecoration(
          color: colorScheme.surface,
          borderRadius: const BorderRadius.vertical(top: Radius.circular(28)), // Material 3 rounded corners
          boxShadow: [
            BoxShadow(
              color: colorScheme.shadow.withOpacity(0.15),
              blurRadius: 24,
              offset: const Offset(0, -4),
              spreadRadius: 0,
            ),
          ],
        ),
        child: SafeArea(
          child: Semantics(
            namesRoute: true,
            scopesRoute: true,
            explicitChildNodes: true,
            child: Column(
              children: [
                // Material 3 drag handle
                Container(
                  width: 32,
                  height: 4,
                  margin: const EdgeInsets.symmetric(vertical: 12),
                  decoration: BoxDecoration(
                    color: colorScheme.onSurfaceVariant.withOpacity(0.4),
                    borderRadius: BorderRadius.circular(2),
                  ),
                ),
                _buildModernContent(context),
                _buildModernActions(context),
              ],
              mainAxisSize: MainAxisSize.min,
              crossAxisAlignment: CrossAxisAlignment.stretch,
            ),
          ),
        ),
      );
    },
    enableDrag: valueOf('enableDrag', enableDrag),
    onDragStart: valueOf('onDragStart', onDragStart),
    onDragEnd: valueOf('onDragEnd', onDragEnd),
    elevation: 0, // Using custom shadow instead
    shape: const RoundedRectangleBorder(
      borderRadius: BorderRadius.vertical(top: Radius.circular(28)),
    ),
    clipBehavior: valueOf('clipBehavior', clipBehavior) ?? Clip.hardEdge,
    backgroundColor: Colors.transparent, // Using container decoration instead
  );
}