import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:penyaluran_app/app/data/models/user_model.dart'; import 'package:penyaluran_app/app/services/auth_service.dart'; class ProfileController extends GetxController { final AuthService _authService = Get.find(); final Rx user = Rx(null); final RxBool isLoading = true.obs; final RxBool isEditing = false.obs; // Form controllers late TextEditingController nameController; late TextEditingController emailController; late TextEditingController phoneController; @override void onInit() { super.onInit(); nameController = TextEditingController(); emailController = TextEditingController(); phoneController = TextEditingController(); loadUserData(); } @override void onClose() { nameController.dispose(); emailController.dispose(); phoneController.dispose(); super.onClose(); } Future loadUserData() async { isLoading.value = true; try { // Mendapatkan data user dari service final userData = await _authService.getCurrentUser(); user.value = userData; // Mengisi form controllers dengan data user if (userData != null) { nameController.text = userData.name ?? ''; emailController.text = userData.email ?? ''; phoneController.text = userData.phone ?? ''; } } catch (e) { Get.snackbar( 'Error', 'Gagal memuat data profil: ${e.toString()}', snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.red, colorText: Colors.white, ); } finally { isLoading.value = false; } } void toggleEditMode() { isEditing.value = !isEditing.value; } Future updateProfile() async { if (nameController.text.isEmpty) { Get.snackbar( 'Error', 'Nama tidak boleh kosong', snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.red, colorText: Colors.white, ); return; } isLoading.value = true; try { // Update user data final updatedUser = User( id: user.value?.id, name: nameController.text, email: emailController.text, phone: phoneController.text, role: user.value?.role, token: user.value?.token, ); // Panggil API untuk update profil await _authService.updateProfile(updatedUser); // Refresh data await loadUserData(); // Keluar dari mode edit isEditing.value = false; Get.snackbar( 'Sukses', 'Profil berhasil diperbarui', snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.green, colorText: Colors.white, ); } catch (e) { Get.snackbar( 'Error', 'Gagal memperbarui profil: ${e.toString()}', snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.red, colorText: Colors.white, ); } finally { isLoading.value = false; } } Future changePassword(String currentPassword, String newPassword, String confirmPassword) async { if (newPassword != confirmPassword) { Get.snackbar( 'Error', 'Konfirmasi password tidak sesuai', snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.red, colorText: Colors.white, ); return; } isLoading.value = true; try { // Panggil API untuk ganti password await _authService.changePassword(currentPassword, newPassword); Get.back(); // Tutup dialog Get.snackbar( 'Sukses', 'Password berhasil diubah', snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.green, colorText: Colors.white, ); } catch (e) { Get.snackbar( 'Error', 'Gagal mengubah password: ${e.toString()}', snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.red, colorText: Colors.white, ); } finally { isLoading.value = false; } } }