Perbarui model dan tampilan untuk mendukung perubahan struktur data pengguna. Ganti properti nama dan telepon dengan namaLengkap dan noHp di beberapa model, termasuk DonaturModel, PetugasDesaModel, dan WargaModel. Modifikasi tampilan dan controller untuk menggunakan properti baru ini. Tambahkan fungsionalitas baru untuk menampilkan nama lengkap dan nomor telepon dengan lebih baik di berbagai tampilan. Perbarui rute dan logika aplikasi untuk mencerminkan perubahan ini.

This commit is contained in:
Khafidh Fuadi
2025-03-25 10:43:21 +07:00
parent 54c4660302
commit 8e9553d1fc
39 changed files with 1819 additions and 704 deletions

View File

@ -1,14 +1,17 @@
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';
import 'package:penyaluran_app/app/services/supabase_service.dart';
import 'package:penyaluran_app/app/modules/auth/controllers/auth_controller.dart';
class ProfileController extends GetxController {
final AuthService _authService = Get.find<AuthService>();
final SupabaseService _supabaseService = Get.find<SupabaseService>();
final AuthController _authController = Get.find<AuthController>();
final Rx<User?> user = Rx<User?>(null);
final Rx<BaseUserModel?> user = Rx<BaseUserModel?>(null);
final RxBool isLoading = true.obs;
final RxBool isEditing = false.obs;
final Rx<Map<String, dynamic>?> roleData = Rx<Map<String, dynamic>?>(null);
// Form controllers
late TextEditingController nameController;
@ -36,14 +39,23 @@ class ProfileController extends GetxController {
isLoading.value = true;
try {
// Mendapatkan data user dari service
final userData = await _authService.getCurrentUser();
user.value = userData;
// Mengisi form controllers dengan data user
final userData = await _supabaseService.getUserProfile();
if (userData != null) {
nameController.text = userData.name ?? '';
emailController.text = userData.email ?? '';
phoneController.text = userData.phone ?? '';
user.value = BaseUserModel.fromJson(userData);
// Mengisi form controllers dengan data user
nameController.text = user.value?.name ?? '';
emailController.text = user.value?.email ?? '';
// Catatan: BaseUserModel tidak memiliki properti phone
// Jika ada data role_data, simpan untuk ditampilkan
if (userData['role_data'] != null) {
roleData.value = userData['role_data'] as Map<String, dynamic>?;
// Jika role adalah warga, ambil no telepon dari role data
if (user.value?.role?.toLowerCase() == 'warga' &&
roleData.value?['no_hp'] != null) {
phoneController.text = roleData.value?['no_hp'] ?? '';
}
}
}
} catch (e) {
Get.snackbar(
@ -76,22 +88,45 @@ class ProfileController extends GetxController {
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,
);
final userData = user.value;
if (userData == null) throw 'Data user tidak ditemukan';
// Panggil API untuk update profil
await _authService.updateProfile(updatedUser);
// Update data sesuai role
switch (userData.role?.toLowerCase() ?? 'unknown') {
case 'warga':
await _supabaseService.updateWargaProfile(
userId: userData.id,
namaLengkap: nameController.text,
noHp: phoneController.text,
email: emailController.text,
);
break;
case 'donatur':
await _supabaseService.updateDonaturProfile(
userId: userData.id,
nama: nameController.text,
noHp: phoneController.text,
email: emailController.text,
);
break;
case 'petugas_desa':
await _supabaseService.updatePetugasDesaProfile(
userId: userData.id,
nama: nameController.text,
noHp: phoneController.text,
email: emailController.text,
);
break;
default:
throw 'Role tidak valid';
}
// Refresh data
// Refresh data lokal
await loadUserData();
// Refresh data di AuthController untuk menyebarkan perubahan ke seluruh aplikasi
await _authController.refreshUserData();
// Keluar dari mode edit
isEditing.value = false;
@ -131,7 +166,7 @@ class ProfileController extends GetxController {
isLoading.value = true;
try {
// Panggil API untuk ganti password
await _authService.changePassword(currentPassword, newPassword);
await _supabaseService.changePassword(currentPassword, newPassword);
Get.back(); // Tutup dialog