From a5058cd0bcaf9ed7e5c1480bcee35f7f976c4a75 Mon Sep 17 00:00:00 2001 From: Vaibhav Surve Date: Wed, 6 Aug 2025 16:30:34 +0530 Subject: [PATCH] managed the dropdown menu display --- .../expense/add_expense_bottom_sheet.dart | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/model/expense/add_expense_bottom_sheet.dart b/lib/model/expense/add_expense_bottom_sheet.dart index 78d822f..d18e3b4 100644 --- a/lib/model/expense/add_expense_bottom_sheet.dart +++ b/lib/model/expense/add_expense_bottom_sheet.dart @@ -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 options, String Function(T) getLabel, ValueChanged 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( @@ -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( @@ -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) {