You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
5.1 KiB
Dart
153 lines
5.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:hmg_patient_app_new/core/app_assets.dart';
|
|
import 'package:hmg_patient_app_new/core/app_export.dart';
|
|
import 'package:hmg_patient_app_new/core/utils/utils.dart';
|
|
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
|
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
|
import 'package:hmg_patient_app_new/theme/colors.dart';
|
|
|
|
void showCommonBottomSheet(BuildContext context,
|
|
{required Widget child,
|
|
Function(String?)? callBackFunc,
|
|
String? title,
|
|
required double height,
|
|
bool isCloseButtonVisible = true,
|
|
bool isFullScreen = true,
|
|
bool isDismissible = true,
|
|
bool isSuccessDialog = false}) {
|
|
showModalBottomSheet<String>(
|
|
sheetAnimationStyle: AnimationStyle(
|
|
duration: Duration(milliseconds: 500), // Custom animation duration
|
|
reverseDuration: Duration(milliseconds: 300), // Custom reverse animation duration
|
|
),
|
|
context: context,
|
|
isScrollControlled: true,
|
|
showDragHandle: false,
|
|
isDismissible: isDismissible,
|
|
backgroundColor: isSuccessDialog ? AppColors.whiteColor : AppColors.scaffoldBgColor,
|
|
builder: (BuildContext context) {
|
|
return Container(
|
|
height: height,
|
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.scaffoldBgColor, borderRadius: 24.h),
|
|
child: ButtonSheetContent(
|
|
title: title!,
|
|
isCloseButtonVisible: isCloseButtonVisible,
|
|
isFullScreen: isFullScreen,
|
|
child: child,
|
|
),
|
|
);
|
|
}).then((value) {
|
|
if (value != null) {
|
|
callBackFunc!(value);
|
|
}
|
|
});
|
|
}
|
|
|
|
class ButtonSheetContent extends StatelessWidget {
|
|
final Widget child;
|
|
final String title;
|
|
final bool isCloseButtonVisible;
|
|
final bool isFullScreen;
|
|
|
|
const ButtonSheetContent({super.key, required this.child, required this.isCloseButtonVisible, required this.title, required this.isFullScreen});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Column(
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
children: [
|
|
// SizedBox(
|
|
// height: 20.h,
|
|
// ),
|
|
// Center(
|
|
// child: Container(
|
|
// margin: const EdgeInsets.only(top: 18, bottom: 12),
|
|
// height: 4,
|
|
// width: 40.h,
|
|
// decoration: BoxDecoration(
|
|
// color: Colors.grey[400],
|
|
// borderRadius: BorderRadius.circular(2),
|
|
// ),
|
|
// ),
|
|
// ),
|
|
|
|
// Close button
|
|
isCloseButtonVisible && isFullScreen
|
|
? Column(children: [
|
|
SizedBox(
|
|
height: 40.h,
|
|
),
|
|
Padding(
|
|
padding: EdgeInsets.symmetric(
|
|
horizontal: 16,
|
|
),
|
|
child: Utils.buildSvgWithAssets(icon: AppAssets.closeBottomNav, width: 32, height: 32).onPress(() {
|
|
Navigator.of(context).pop();
|
|
}),
|
|
)
|
|
])
|
|
: SizedBox(),
|
|
|
|
isFullScreen
|
|
? Column(
|
|
children: [
|
|
SizedBox(height: 20.h),
|
|
Padding(padding: EdgeInsets.symmetric(horizontal: 16.h), child: title.toText24(isBold: true)),
|
|
SizedBox(height: 16.h),
|
|
],
|
|
)
|
|
: SizedBox(),
|
|
|
|
Expanded(child: child)
|
|
],
|
|
);
|
|
}
|
|
}
|
|
|
|
void showCommonBottomSheetWithoutHeight(
|
|
BuildContext context, {
|
|
required Widget child,
|
|
required VoidCallback callBackFunc,
|
|
String title = "",
|
|
bool isCloseButtonVisible = true,
|
|
bool isFullScreen = true,
|
|
}) {
|
|
showModalBottomSheet<String>(
|
|
sheetAnimationStyle: AnimationStyle(
|
|
duration: Duration(milliseconds: 500), // Custom animation duration
|
|
reverseDuration: Duration(milliseconds: 300), // Custom reverse animation duration
|
|
),
|
|
context: context,
|
|
isScrollControlled: true,
|
|
showDragHandle: false,
|
|
backgroundColor: AppColors.bottomSheetBgColor,
|
|
builder: (BuildContext context) {
|
|
return SafeArea(
|
|
top: false,
|
|
left: false,
|
|
right: false,
|
|
child: Container(
|
|
padding: EdgeInsets.only(left: 24, top: 24, right: 24, bottom: 12),
|
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.bottomSheetBgColor, borderRadius: 24.h),
|
|
child: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
spacing: 16.h,
|
|
children: [
|
|
Row(
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
children: [
|
|
if (title.isNotEmpty) title.toText20(weight: FontWeight.w600).expanded,
|
|
Utils.buildSvgWithAssets(icon: AppAssets.close_bottom_sheet_icon, iconColor: Color(0xff2B353E)).onPress(() {
|
|
Navigator.of(context).pop();
|
|
}),
|
|
],
|
|
),
|
|
child,
|
|
],
|
|
)),
|
|
);
|
|
}).then((value) {
|
|
callBackFunc();
|
|
});
|
|
}
|