managed the dropdown menu display

This commit is contained in:
Vaibhav Surve 2025-08-06 16:30:34 +05:30
parent 754f919cdc
commit a5058cd0bc

View File

@ -39,7 +39,9 @@ class _AddExpenseBottomSheet extends StatefulWidget {
class _AddExpenseBottomSheetState extends State<_AddExpenseBottomSheet> {
final AddExpenseController controller = Get.put(AddExpenseController());
final GlobalKey _projectDropdownKey = GlobalKey();
final GlobalKey _expenseTypeDropdownKey = GlobalKey();
final GlobalKey _paymentModeDropdownKey = GlobalKey();
void _showEmployeeList() async {
await showModalBottomSheet(
context: context,
@ -66,9 +68,12 @@ class _AddExpenseBottomSheetState extends State<_AddExpenseBottomSheet> {
List<T> options,
String Function(T) getLabel,
ValueChanged<T> onSelected,
GlobalKey triggerKey, // add this param
) async {
final button = context.findRenderObject() as RenderBox;
final overlay = Overlay.of(context).context.findRenderObject() as RenderBox;
final RenderBox button =
triggerKey.currentContext!.findRenderObject() as RenderBox;
final RenderBox overlay =
Overlay.of(context).context.findRenderObject() as RenderBox;
final position = button.localToGlobal(Offset.zero, ancestor: overlay);
final selected = await showMenu<T>(
@ -76,7 +81,7 @@ class _AddExpenseBottomSheetState extends State<_AddExpenseBottomSheet> {
position: RelativeRect.fromLTRB(
position.dx,
position.dy + button.size.height,
position.dx + button.size.width,
overlay.size.width - position.dx - button.size.width,
0,
),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
@ -119,7 +124,9 @@ class _AddExpenseBottomSheetState extends State<_AddExpenseBottomSheet> {
controller.globalProjects.toList(),
(p) => p,
(val) => controller.selectedProject.value = val,
_projectDropdownKey, // pass the relevant GlobalKey here
),
dropdownKey: _projectDropdownKey, // pass key also here
),
MySpacing.height(16),
_buildDropdown<ExpenseTypeModel>(
@ -132,7 +139,9 @@ class _AddExpenseBottomSheetState extends State<_AddExpenseBottomSheet> {
controller.expenseTypes.toList(),
(e) => e.name,
(val) => controller.selectedExpenseType.value = val,
_expenseTypeDropdownKey,
),
dropdownKey: _expenseTypeDropdownKey,
),
if (controller.selectedExpenseType.value?.noOfPersonsRequired ==
true)
@ -172,7 +181,9 @@ class _AddExpenseBottomSheetState extends State<_AddExpenseBottomSheet> {
controller.paymentModes.toList(),
(p) => p.name,
(val) => controller.selectedPaymentMode.value = val,
_paymentModeDropdownKey,
),
dropdownKey: _paymentModeDropdownKey,
),
MySpacing.height(16),
_SectionTitle(
@ -313,13 +324,18 @@ class _AddExpenseBottomSheetState extends State<_AddExpenseBottomSheet> {
required bool requiredField,
required String value,
required VoidCallback onTap,
required GlobalKey dropdownKey, // new param
}) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_SectionTitle(icon: icon, title: title, requiredField: requiredField),
MySpacing.height(6),
_DropdownTile(title: value, onTap: onTap),
_DropdownTile(
key: dropdownKey, // Pass the key here
title: value,
onTap: onTap,
),
],
);
}
@ -415,7 +431,8 @@ class _DropdownTile extends StatelessWidget {
const _DropdownTile({
required this.title,
required this.onTap,
});
Key? key, // Add optional key parameter
}) : super(key: key);
@override
Widget build(BuildContext context) {