Skip to content

Commit

Permalink
Implement header action menu for sorting, filtering, and resetting in…
Browse files Browse the repository at this point in the history
… QueueTab; adjust padding in UsersPage; align text in QueueCard
  • Loading branch information
HaiAu2501 committed Dec 24, 2024
1 parent 57df6af commit dec791f
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 45 deletions.
100 changes: 62 additions & 38 deletions lib/features/admin/presentation/tabs/queue_tab.dart
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,29 @@ class _QueueTabState extends State<QueueTab> {
});
}

// Mới: Hàm để xử lý lựa chọn từ menu "Thao tác" trong tiêu đề
void handleHeaderAction(String action) {
switch (action) {
case 'Sort':
showSortDialog();
break;
case 'Filter':
showFilterDialog();
break;
case 'Reset':
setState(() {
sortCriteria = null;
filterCriteria = null;
filterValue = '';
applyFilterAndSort();
currentPage = 1;
});
break;
default:
break;
}
}

@override
Widget build(BuildContext context) {
if (isLoadingQueue) {
Expand All @@ -283,9 +306,10 @@ class _QueueTabState extends State<QueueTab> {

return Column(
children: [
SizedBox(height: 8),
// Thông tin thống kê
Padding(
padding: const EdgeInsets.all(8.0),
padding: const EdgeInsets.all(0),
child: Row(
children: [
Expanded(
Expand Down Expand Up @@ -386,40 +410,19 @@ class _QueueTabState extends State<QueueTab> {
],
),
),
// Nút Sắp xếp và Lọc
// Nút Thao tác trong tiêu đề
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
child: Row(
children: [
ElevatedButton.icon(
onPressed: showSortDialog,
icon: const Icon(Icons.sort),
label: const Text('Sắp xếp'),
),
const SizedBox(width: 10),
ElevatedButton.icon(
onPressed: showFilterDialog,
icon: const Icon(Icons.filter_list),
label: const Text('Lọc'),
),
// Loại bỏ hai nút "Sắp xếp" và "Lọc"
// Thêm Spacer hoặc các widget khác nếu cần
const Spacer(),
if (filterCriteria != null || sortCriteria != null)
IconButton(
icon: const Icon(Icons.clear),
tooltip: 'Đặt lại',
onPressed: () {
setState(() {
filterCriteria = null;
sortCriteria = null;
applyFilterAndSort();
currentPage = 1;
});
},
),
// Không cần nút "Clear" riêng
],
),
),
// Thẻ tiêu đề cột
// Thẻ tiêu đề cột với nút "Thao tác"
Card(
margin: EdgeInsets.zero, // Loại bỏ margin giữa các Card
elevation: 0, // Loại bỏ hiệu ứng đổ bóng
Expand All @@ -430,55 +433,76 @@ class _QueueTabState extends State<QueueTab> {
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 16.0),
child: Row(
children: const [
Expanded(
children: [
// Các cột tiêu đề khác
const Expanded(
flex: 3,
child: Text(
'Họ và tên',
textAlign: TextAlign.center, // Căn giữa
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 16,
),
),
),
Expanded(
const Expanded(
flex: 4,
child: Text(
'Email',
textAlign: TextAlign.center, // Căn giữa
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 16,
),
),
),
Expanded(
const Expanded(
flex: 2,
child: Text(
'Vai trò',
textAlign: TextAlign.center, // Căn giữa
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 16,
),
),
),
Expanded(
const Expanded(
flex: 3,
child: Text(
'Số điện thoại',
textAlign: TextAlign.center, // Căn giữa
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 16,
),
),
),
// Cột Thao tác với nút PopupMenuButton
Expanded(
flex: 2,
child: Text(
'Thao tác',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 16,
),
child: PopupMenuButton<String>(
icon: const Icon(Icons.more_vert),
tooltip: 'Thao tác',
onSelected: handleHeaderAction,
itemBuilder: (BuildContext context) => <PopupMenuEntry<String>>[
const PopupMenuItem<String>(
value: 'Sort',
child: Text('Sắp xếp'),
),
const PopupMenuItem<String>(
value: 'Filter',
child: Text('Lọc'),
),
const PopupMenuItem<String>(
value: 'Reset',
child: Text('Đặt lại'),
),
],
// Điều chỉnh vị trí của menu
// Bạn có thể cần điều chỉnh giá trị Offset tùy thuộc vào thiết kế của bạn
offset: const Offset(0, 40), // Giảm hoặc tăng giá trị X để căn giữa
),
),
],
Expand Down
2 changes: 1 addition & 1 deletion lib/features/admin/presentation/users_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class _UsersPageState extends State<UsersPage> {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
// Hiển thị thông báo
Expand Down
17 changes: 11 additions & 6 deletions lib/features/admin/presentation/widgets/queue_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -123,47 +123,52 @@ class _QueueCardState extends State<QueueCard> {

return Column(
children: [
// Nội dung chính của QueueCard
Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0),
child: Row(
children: [
// Họ và tên
// Họ và tên (Căn lề trái)
Expanded(
flex: 3,
child: Text(
fullName,
style: const TextStyle(fontSize: 16),
textAlign: TextAlign.left, // Căn lề trái
),
),
// Email
// Email (Căn lề trái)
Expanded(
flex: 4,
child: Text(
email,
style: const TextStyle(fontSize: 16),
textAlign: TextAlign.left, // Căn lề trái
),
),
// Vai trò
// Vai trò (Căn lề trái)
Expanded(
flex: 2,
child: Text(
role,
style: const TextStyle(fontSize: 16),
textAlign: TextAlign.center, // Căn lề trái
),
),
// Số điện thoại
// Số điện thoại (Căn lề trái)
Expanded(
flex: 3,
child: Text(
phone,
style: const TextStyle(fontSize: 16),
textAlign: TextAlign.center, // Căn lề trái
),
),
// Thao tác
// Thao tác (Căn giữa các icon)
Expanded(
flex: 2,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center, // Căn giữa các icon
children: [
IconButton(
icon: const Icon(Icons.check, color: Colors.green),
Expand Down

0 comments on commit dec791f

Please sign in to comment.