part of 'dialog.dart'; class CustomModalDialog extends StatelessWidget { final String title; final String? subtitle; final Widget child; final VoidCallback? onClose; final double? minWidth; final double? maxWidth; final double? minHeight; final double? maxHeight; final EdgeInsets? contentPadding; const CustomModalDialog({ super.key, required this.title, this.subtitle, required this.child, this.onClose, this.minWidth, this.maxWidth, this.minHeight, this.maxHeight, this.contentPadding, }); @override Widget build(BuildContext context) { return Dialog( backgroundColor: AppColor.white, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), child: ConstrainedBox( constraints: BoxConstraints( minWidth: minWidth ?? context.deviceWidth * 0.3, maxWidth: maxWidth ?? context.deviceWidth * 0.8, minHeight: minHeight ?? context.deviceHeight * 0.3, maxHeight: maxHeight ?? context.deviceHeight * 0.8, ), child: IntrinsicWidth( child: Column( mainAxisSize: MainAxisSize.min, children: [ Container( padding: const EdgeInsets.all(16), width: double.infinity, decoration: BoxDecoration( gradient: LinearGradient( colors: AppColor.primaryGradient, begin: Alignment.topLeft, end: Alignment.bottomRight, ), borderRadius: BorderRadius.vertical(top: Radius.circular(16)), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, style: AppStyle.xxl.copyWith( color: AppColor.white, fontWeight: FontWeight.bold, ), ), if (subtitle != null) Text( subtitle ?? '', style: AppStyle.lg.copyWith( color: AppColor.textSecondary, fontWeight: FontWeight.w500, ), ), ], ), ), SpaceWidth(12), IconButton( icon: Icon(Icons.close, color: AppColor.white), onPressed: () { if (onClose != null) { onClose!(); } else { context.maybePop(); } }, ), ], ), ), Flexible( child: SingleChildScrollView( padding: contentPadding ?? EdgeInsets.zero, child: child, ), ), ], ), ), ), ); } }