TIF_E41211491/lib/app/modules/pesananKurir/controllers/pesananKurir_controller.dart

195 lines
5.4 KiB
Dart

import 'package:flutter_barcode_scanner/flutter_barcode_scanner.dart';
import 'package:get/get.dart';
import 'package:flutter/material.dart';
import '../../../data/models/pesanan_kirim_model.dart';
import '../../../data/providers/pesanan_provider.dart';
class PesananKurirController extends GetxController
with GetTickerProviderStateMixin {
//TODO: Implement PesananController
late AnimationController _controller;
late TabController tabController; // Tambahkan variabel TabController
final count = 0.obs;
final isLoading = true.obs; // Define RxBool for loading state
final pesananProvider = PesananProvider().obs; // Instantiate your provider
late PesananKirim pesananUntukDikirim = PesananKirim();
late PesananKirim pesananKonfirmasi = PesananKirim();
late PesananKirim loadRiwayat = PesananKirim();
var orderUntukDikirim = <DataPesananKirim>[].obs;
var orderKonfirmasi = <DataPesananKirim>[].obs;
var riwayatKurir = <DataPesananKirim>[].obs;
String scannedQrCode = '';
@override
void onInit() {
super.onInit();
_controller = AnimationController(
vsync: this,
duration: Duration(seconds: 1),
);
tabController = TabController(length: 2, vsync: this);
tabController.addListener(_handleTabSelection);
loadUntukDikirim();
loadKonfirmasi();
loadRiwayatKurir();
}
@override
void onReady() {
super.onReady();
}
@override
void onClose() {
_controller.dispose();
tabController.dispose(); // Hapus TabController saat controller ditutup
super.onClose();
}
void _handleTabSelection() async {
// Handle perubahan tab di sini
switch (tabController.index) {
case 0:
loadUntukDikirim();
break;
case 1:
loadKonfirmasi();
break;
}
}
void increment() => count.value++;
void startAnimation() {
_controller.forward();
}
DataPesananKirim? findOrderById(String orderId) {
// Cari pesanan di setiap kategori (proses, dikirim, diterima)
final orderDikirimById = orderUntukDikirim
.firstWhereOrNull((order) => order.transaksi?.kodeTr == orderId);
if (orderDikirimById != null) {
return orderDikirimById;
}
final orderDiterimaById = orderKonfirmasi
.firstWhereOrNull((order) => order.transaksi?.kodeTr == orderId);
if (orderDiterimaById != null) {
return orderDiterimaById;
}
return null; // Return null jika pesanan tidak ditemukan
}
Future<void> scanQrCode(String kode_tr) async {
try {
// Panggil fungsi scan QR code dari paket barcode_scanner
scannedQrCode = await FlutterBarcodeScanner.scanBarcode(
'#ff6666',
'Cancel',
true,
ScanMode.QR,
);
if (kode_tr != scannedQrCode) {
Get.snackbar("Scan Gagal, ", "Kode Tidak Sesuai",
snackPosition: SnackPosition.BOTTOM,
duration: Duration(seconds: 5),
backgroundColor: Colors.red,
colorText: Colors.white);
}
if (scannedQrCode == kode_tr) {
Get.snackbar("Scan Berhasil, ", "Menunggu Konfirmasi Admin",
snackPosition: SnackPosition.BOTTOM,
duration: Duration(seconds: 5),
backgroundColor: Colors.green,
colorText: Colors.white);
await confirmKurir(kode_tr, scannedQrCode);
}
// Update nilai hasil scan ke dalam variabel scannedQrCode
// scannedQrCode.value = result ?? '';
} catch (e) {
// Tangani error jika terjadi
print('Error during QR code scanning: $e');
}
}
Future<void> refreshPesanan() async {
await loadUntukDikirim();
await loadKonfirmasi();
}
Future<void> loadUntukDikirim() async {
try {
isLoading(true);
final result = await pesananProvider.value.untukDikirim();
pesananUntukDikirim = result;
orderUntukDikirim.assignAll(result.data!);
isLoading(false);
} catch (error) {
isLoading(false);
print('Error fetching data: $error');
}
}
Future<void> loadKonfirmasi() async {
try {
isLoading(true);
final result = await pesananProvider.value.konfirmasi();
pesananKonfirmasi = result;
orderKonfirmasi.assignAll(result.data!);
isLoading(false);
} catch (error) {
isLoading(false);
print('Error fetching data: $error');
}
}
Future<void> loadRiwayatKurir() async {
try {
isLoading(true);
final result = await pesananProvider.value.riwayatKurir();
loadRiwayat = result;
riwayatKurir.assignAll(result.data!);
isLoading(false);
} catch (error) {
isLoading(false);
print('Error fetching data: $error');
}
}
Future<void> acceptedPesanan(String kodeTr) async {
try {
isLoading(true);
await pesananProvider.value.acceptPesanan(kodeTr);
// Refresh data setelah pembatalan pesanan berhasil
await loadUntukDikirim();
update();
isLoading(false);
} catch (error) {
isLoading(false);
print('Error saat mengkonfirmasi pesanan diantar: $error');
}
}
Future<void> confirmKurir(String kodeTr, String bukti) async {
try {
isLoading(true);
await pesananProvider.value.konfirKurir(kodeTr, bukti);
// Refresh data setelah pembatalan pesanan berhasil
await loadKonfirmasi();
update();
isLoading(false);
} catch (error) {
isLoading(false);
print('Error saat membatalkan pesanan: $error');
}
}
}