TIF_E41211491/lib/app/modules/riwayat/controllers/riwayat_controller.dart

170 lines
4.9 KiB
Dart

// ignore_for_file: unused_import, unnecessary_null_comparison
import 'package:dikantin/app/data/models/search_model.dart';
import 'package:dikantin/app/data/providers/riwayat_provider.dart';
// import 'package:dikantin/app/data/models/riwayat_model.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../data/models/penjualan_model.dart';
import '../../../data/providers/menu_provider.dart';
class RiwayatController extends GetxController
with GetTickerProviderStateMixin {
late AnimationController _controller;
late TabController tabController;
late Penjualan penjualan = Penjualan();
final count = 0.obs;
final riwayatProvider = RiwayatProvider().obs;
late Rx<DateTime> selectedDate = DateTime.now().obs;
var cartList = <Datasearch>[].obs;
var itemQuantities = <int, int>{}.obs;
final searchResults = <Datasearch>[].obs;
final isLoading = false.obs; // Tambahkan isLoading
@override
void onInit() {
super.onInit();
refreshData();
searchAll();
search('', '');
searchDate('');
}
@override
void onReady() {
super.onReady();
}
void addToCart(Datasearch item) {
// Cek apakah item sudah ada di keranjang
if (!cartList.any((element) => element.idMenu == item.idMenu)) {
cartList.add(item);
itemQuantities[item.idMenu!] = 1;
Get.snackbar(
'berhasil',
'menambahkan ke keranjang',
snackPosition: SnackPosition.TOP,
duration: Duration(seconds: 2),
);
} else {
addQuantity(item.idMenu!);
}
itemQuantities.refresh();
}
void removeFromCart(Datasearch item) {
cartList.removeWhere((element) => element.nama == item.nama);
itemQuantities.remove(item.idMenu); // Ini akan menghapus kuantitas dari map
itemQuantities
.refresh(); // Memperbarui observers agar jumlah total kuantitas diperbarui di UI
Get.snackbar(
'berhasil',
'berhasil menghapus',
snackPosition: SnackPosition.TOP,
duration: Duration(seconds: 2),
);
update(); // Memanggil update untuk memicu pembaruan UI pada widget yang terkait
}
void addQuantity(int idMenu) {
if (itemQuantities.containsKey(idMenu)) {
itemQuantities[idMenu] = (itemQuantities[idMenu] ?? 1) + 1;
} else {
itemQuantities[idMenu] =
1; // Jika item belum ada dalam map, set kuantitas ke 1
}
itemQuantities.refresh(); // Memperbarui UI
}
chooseDate() async {
DateTime? pickerDate = await showDatePicker(
context: Get.context!,
initialDate: selectedDate.value,
firstDate: DateTime(2000),
lastDate: DateTime(2050),
helpText: 'Pilih Tanggal Pemesanan Anda',
cancelText: 'Batal',
confirmText: 'Pilih');
if (pickerDate != null && pickerDate != selectedDate.value) {
selectedDate.value = pickerDate;
print(selectedDate.value);
await refreshData();
}
}
deleteDate() async {
if (selectedDate.value != null) {
selectedDate == null;
update();
}
}
@override
void onClose() {
_controller.dispose();
tabController.dispose();
super.onClose();
}
void increment() => count.value++;
void startAnimation() {
_controller.forward();
}
void setLoading(bool value) {
isLoading.value = value; // Metode untuk mengatur status isLoading
}
Future<void> refreshData() async {
await search('', '');
await searchDate('');
}
Future<void> search(String keyword, String Date) async {
try {
setLoading(
true); // Set isLoading menjadi true saat pemanggilan API dimulai
final results = await riwayatProvider.value
.searchRiwayat(keyword, selectedDate.value.toString());
searchResults.assignAll(results.data ?? []);
} catch (e) {
print('Error during search: $e');
searchResults.clear();
} finally {
setLoading(
false); // Set isLoading menjadi false saat pemanggilan API selesai
}
}
Future<void> searchDate(String keyword) async {
try {
setLoading(
true); // Set isLoading menjadi true saat pemanggilan API dimulai
final results = await riwayatProvider.value
.searchRiwayatDate(selectedDate.value.toString());
searchResults.assignAll(results.data ?? []);
} catch (e) {
print('Error during search: $e');
searchResults.clear();
} finally {
setLoading(
false); // Set isLoading menjadi false saat pemanggilan API selesai
}
}
Future<void> searchAll() async {
try {
setLoading(
true); // Set isLoading menjadi true saat pemanggilan API dimulai
final results = await riwayatProvider.value.searchRiwayatall();
searchResults.assignAll(results.data ?? []);
} catch (e) {
print('Error during search: $e');
searchResults.clear();
} finally {
setLoading(
false); // Set isLoading menjadi false saat pemanggilan API selesai
}
}
}