MIF_E31222379_MOBILE/lib/widget/custom_bottom_sheet.dart

93 lines
2.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import 'package:rijig_mobile/core/router.dart';
import 'package:rijig_mobile/core/utils/guide.dart';
class CustomBottomSheet extends StatelessWidget {
final String title;
final Widget content;
final Widget button1;
final Widget? button2;
const CustomBottomSheet({
super.key,
required this.title,
required this.content,
required this.button1,
this.button2,
});
static void show({
required BuildContext context,
required String title,
required Widget content,
required Widget button1,
Widget? button2,
Duration duration = const Duration(milliseconds: 380),
}) {
showModalBottomSheet(
context: context,
isScrollControlled: true,
backgroundColor: Colors.transparent,
transitionAnimationController: AnimationController(
vsync: Navigator.of(context),
duration: duration,
),
builder: (context) {
return CustomBottomSheet(
title: title,
content: content,
button1: button1,
button2: button2,
);
},
);
}
@override
Widget build(BuildContext context) {
return Stack(
clipBehavior: Clip.none,
children: [
Container(
padding: PaddingCustom().paddingAll(15),
margin: const EdgeInsets.only(top: 30),
decoration: BoxDecoration(
color: whiteColor,
borderRadius: const BorderRadius.vertical(top: Radius.circular(15)),
),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(title, style: Tulisan.subheading(fontsize: 20)),
const Gap(12),
content,
const Gap(24),
if (button2 != null)
Column(children: [button1, const Gap(12), button2!])
else
button1,
],
),
),
Positioned(
top: -25,
right: 5,
child: GestureDetector(
onTap: () => router.pop(),
child: Container(
padding: PaddingCustom().paddingAll(10),
decoration: BoxDecoration(
color: whiteColor,
shape: BoxShape.circle,
),
child: const Icon(Icons.close, size: 25),
),
),
),
],
);
}
}