buildByMaterial method
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
);
}