managed the dropdown menu display
This commit is contained in:
parent
754f919cdc
commit
a5058cd0bc
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user