import 'package:flutter/material.dart';
class DraggableBottomSheetPage<T> extends Page<T> {
final Widget Function(BuildContext context, ScrollController scrollController) builder;
final bool showDragHandle;
final bool useSafeArea;
final double maxChildSize;
final double minChildSize;
final double initialChildSize;
const DraggableBottomSheetPage({
required this.builder,
this.showDragHandle = false,
this.useSafeArea = true,
this.maxChildSize = 1,
this.minChildSize = 0.5,
this.initialChildSize = 0.6,
super.key,
});
@override
Route<T> createRoute(BuildContext context) => ModalBottomSheetRoute<T>(
settings: this,
isScrollControlled: false,
showDragHandle: showDragHandle,
useSafeArea: useSafeArea,
isDismissible: true,
enableDrag: true,
scrollControlDisabledMaxHeightRatio: 1.0,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(30)),
),
clipBehavior: Clip.antiAlias,
builder: (context) {
return DraggableScrollableSheet(
initialChildSize: initialChildSize,
minChildSize: minChildSize,
maxChildSize: maxChildSize,
shouldCloseOnMinExtent: true,
expand: false,
snap: true,
snapSizes: [initialChildSize],
builder: (BuildContext context, ScrollController scrollController) {
return builder(context, scrollController);
},
);
},
);
}