Tambahkan filter dan perbaikan tampilan pada stok bantuan

- Tambahkan fitur filter untuk stok bantuan (uang, barang, hampir habis)
- Perbarui metode getFilteredStokBantuan() untuk mendukung filter
- Tambahkan dropdown filter di tampilan stok bantuan
- Tambahkan properti filterValue di StokBantuanController
- Perbarui pesan tampilan saat tidak ada data sesuai filter
- Tambahkan properti showInfoBanner untuk pengembangan selanjutnya
This commit is contained in:
Khafidh Fuadi
2025-03-12 08:48:55 +07:00
parent 8d5fb275e8
commit 6e775044da
2 changed files with 69 additions and 9 deletions

View File

@ -10,6 +10,7 @@ class StokBantuanController extends GetxController {
final SupabaseService _supabaseService = SupabaseService.to; final SupabaseService _supabaseService = SupabaseService.to;
final RxBool isLoading = false.obs; final RxBool isLoading = false.obs;
final RxBool showInfoBanner = true.obs;
// Data untuk stok bantuan // Data untuk stok bantuan
final RxList<StokBantuanModel> daftarStokBantuan = <StokBantuanModel>[].obs; final RxList<StokBantuanModel> daftarStokBantuan = <StokBantuanModel>[].obs;
@ -26,6 +27,9 @@ class StokBantuanController extends GetxController {
final TextEditingController searchController = TextEditingController(); final TextEditingController searchController = TextEditingController();
final RxString searchQuery = ''.obs; final RxString searchQuery = ''.obs;
// Filter untuk stok bantuan
final RxString filterValue = 'semua'.obs;
// Tambahkan properti untuk total dana bantuan // Tambahkan properti untuk total dana bantuan
RxDouble totalDanaBantuan = 0.0.obs; RxDouble totalDanaBantuan = 0.0.obs;
@ -241,10 +245,30 @@ class StokBantuanController extends GetxController {
} }
List<StokBantuanModel> getFilteredStokBantuan() { List<StokBantuanModel> getFilteredStokBantuan() {
if (searchQuery.isEmpty) { var filteredList = <StokBantuanModel>[];
return daftarStokBantuan;
} else { // Filter berdasarkan jenis (uang/barang/hampir habis)
return daftarStokBantuan switch (filterValue.value) {
case 'uang':
filteredList =
daftarStokBantuan.where((item) => item.isUang == true).toList();
break;
case 'barang':
filteredList =
daftarStokBantuan.where((item) => item.isUang != true).toList();
break;
case 'hampir_habis':
filteredList = daftarStokBantuan
.where((item) => (item.totalStok ?? 0) <= 10)
.toList();
break;
default: // 'semua'
filteredList = daftarStokBantuan.toList();
}
// Filter berdasarkan pencarian jika ada
if (searchQuery.isNotEmpty) {
return filteredList
.where((item) => .where((item) =>
(item.nama (item.nama
?.toLowerCase() ?.toLowerCase()
@ -260,6 +284,8 @@ class StokBantuanController extends GetxController {
false)) false))
.toList(); .toList();
} }
return filteredList;
} }
// Metode untuk mendapatkan jumlah stok yang hampir habis (stok <= 10) // Metode untuk mendapatkan jumlah stok yang hampir habis (stok <= 10)
@ -287,4 +313,9 @@ class StokBantuanController extends GetxController {
Future<void> _filterStokBantuan() async { Future<void> _filterStokBantuan() async {
// Implementasi metode _filterStokBantuan // Implementasi metode _filterStokBantuan
} }
// Metode untuk mengatur filter
void setFilter(String value) {
filterValue.value = value;
}
} }

View File

@ -235,11 +235,38 @@ class StokBantuanView extends GetView<StokBantuanController> {
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey.shade100, color: Colors.grey.shade100,
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
border: Border.all(color: Colors.grey.shade300, width: 1),
),
padding: const EdgeInsets.symmetric(horizontal: 8),
child: DropdownButtonHideUnderline(
child: DropdownButton<String>(
value: controller.filterValue.value,
icon: const Icon(Icons.filter_list),
hint: const Text('Filter'),
items: [
DropdownMenuItem(
value: 'semua',
child: Text('Semua'),
),
DropdownMenuItem(
value: 'uang',
child: Text('Uang'),
),
DropdownMenuItem(
value: 'barang',
child: Text('Barang'),
),
DropdownMenuItem(
value: 'hampir_habis',
child: Text('Hampir Habis'),
),
],
onChanged: (value) {
if (value != null) {
controller.setFilter(value);
}
},
), ),
child: IconButton(
onPressed: controller.refreshData,
icon: const Icon(Icons.refresh),
tooltip: 'Refresh',
), ),
), ),
], ],
@ -261,7 +288,9 @@ class StokBantuanView extends GetView<StokBantuanController> {
const SizedBox(height: 16), const SizedBox(height: 16),
Text( Text(
controller.searchQuery.isEmpty controller.searchQuery.isEmpty
? controller.filterValue.value == 'semua'
? 'Belum ada data stok bantuan' ? 'Belum ada data stok bantuan'
: 'Tidak ada stok bantuan yang sesuai dengan filter'
: 'Tidak ada stok bantuan yang sesuai dengan pencarian', : 'Tidak ada stok bantuan yang sesuai dengan pencarian',
style: const TextStyle(color: Colors.grey), style: const TextStyle(color: Colors.grey),
textAlign: TextAlign.center, textAlign: TextAlign.center,