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:
@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user