mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2025-07-15 17:47:28 +00:00
46 lines
1.3 KiB
Dart
46 lines
1.3 KiB
Dart
|
|
import 'package:flutter/material.dart';
|
|
import 'package:syncrow_app/utils/context_extension.dart';
|
|
|
|
class CustomBottomSheet extends StatelessWidget {
|
|
const CustomBottomSheet({
|
|
super.key,
|
|
this.child,
|
|
this.height,
|
|
this.maxHeight,
|
|
this.radius = 20,
|
|
this.withClosed = true,
|
|
});
|
|
final Widget? child;
|
|
final double? height;
|
|
final double? maxHeight;
|
|
final double radius;
|
|
final bool withClosed;
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final bottom = MediaQuery.of(context).viewInsets.bottom;
|
|
return SafeArea(
|
|
child: ConstrainedBox(
|
|
constraints: BoxConstraints(
|
|
minHeight: height ?? 250,
|
|
maxHeight: maxHeight ?? context.height * 0.8,
|
|
),
|
|
child: SingleChildScrollView(
|
|
keyboardDismissBehavior: ScrollViewKeyboardDismissBehavior.onDrag,
|
|
physics: bottom == 0
|
|
? const NeverScrollableScrollPhysics()
|
|
: const BouncingScrollPhysics(),
|
|
child: AnimatedContainer(
|
|
duration: const Duration(milliseconds: 50),
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(16),
|
|
),
|
|
padding: EdgeInsets.only(bottom: bottom),
|
|
child: child ?? const SizedBox(),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|