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