marco.pms.mobileapp/lib/model/expense/employee_selector_bottom_sheet.dart

74 lines
2.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:marco/controller/expense/add_expense_controller.dart';
import 'package:marco/helpers/widgets/my_spacing.dart';
import 'package:marco/helpers/widgets/my_text.dart';
import 'package:marco/helpers/utils/base_bottom_sheet.dart';
class EmployeeSelectorBottomSheet extends StatelessWidget {
final AddExpenseController controller = Get.find<AddExpenseController>();
EmployeeSelectorBottomSheet({super.key});
@override
Widget build(BuildContext context) {
return BaseBottomSheet(
title: "Search Employee",
onCancel: () => Get.back(),
onSubmit: () {},
showButtons: false,
child: Obx(() {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextField(
controller: controller.employeeSearchController,
decoration: InputDecoration(
hintText: "Search by name, email...",
prefixIcon: const Icon(Icons.search),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
),
contentPadding:
const EdgeInsets.symmetric(horizontal: 12, vertical: 10),
),
onChanged: (value) => controller.searchEmployees(value),
),
MySpacing.height(12),
SizedBox(
height: 400, // Adjust this if needed
child: controller.isSearchingEmployees.value
? const Center(child: CircularProgressIndicator())
: controller.employeeSearchResults.isEmpty
? Center(
child: MyText.bodyMedium(
"No employees found.",
fontWeight: 500,
),
)
: ListView.builder(
itemCount: controller.employeeSearchResults.length,
itemBuilder: (_, index) {
final emp = controller.employeeSearchResults[index];
final fullName =
'${emp.firstName} ${emp.lastName}'.trim();
return ListTile(
title: MyText.bodyLarge(
fullName.isNotEmpty ? fullName : "Unnamed",
fontWeight: 600,
),
onTap: () {
controller.selectedPaidBy.value = emp;
Get.back();
},
);
},
),
),
],
);
}),
);
}
}