Tambahkan fungsionalitas pendaftaran donatur baru tanpa konfirmasi email di AuthProvider. Perbarui model DonaturModel untuk menyertakan properti isManual. Modifikasi tampilan dan controller untuk mendukung registrasi donatur, termasuk validasi form dan navigasi ke halaman pendaftaran. Perbarui rute aplikasi untuk menambahkan halaman pendaftaran donatur. Selain itu, perbarui beberapa file konfigurasi dan dependensi untuk mendukung perubahan ini.

This commit is contained in:
Khafidh Fuadi
2025-03-26 14:39:12 +07:00
parent eede5ebd4d
commit f74c058c71
31 changed files with 2454 additions and 960 deletions

View File

@ -166,6 +166,90 @@ class AuthProvider {
}
}
// Metode untuk mendaftarkan donatur (role_id 3)
// Implementasi baru yang tidak memerlukan konfirmasi email
Future<void> signUpDonatur({
required String email,
required String password,
required String namaLengkap,
required String alamat,
required String noHp,
String? jenis,
}) async {
try {
// Step 1: Daftarkan user dengan role_id 3 (donatur)
final response = await _supabaseService.client.auth.signUp(
email: email,
password: password,
data: {
'role_id': 3, // Otomatis set sebagai donatur
},
// Tidak menggunakan email redirect karena kita akan auto-confirm
);
final user = response.user;
if (user == null) {
throw Exception('Gagal membuat akun donatur');
}
print('User berhasil terdaftar dengan ID: ${user.id}');
// Step 2: Buat data donatur di tabel donatur
await _supabaseService.client.from('donatur').insert({
'id': user.id,
'nama_lengkap': namaLengkap,
'alamat': alamat,
'no_hp': noHp,
'email': email,
'jenis': jenis ?? 'Individu',
'created_at': DateTime.now().toIso8601String(),
});
// Step 3: Pastikan di tabel profiles_backup juga ada data ini (jika digunakan)
try {
await _supabaseService.client.from('profiles_backup').insert({
'id': user.id,
'updated_at': DateTime.now().toIso8601String(),
'role_id': 3,
});
} catch (e) {
print('Error menyimpan di profiles_backup: $e');
// Lanjutkan proses meskipun ada error di step ini
}
print('Berhasil mendaftarkan donatur: $namaLengkap');
// Pesan untuk pengembang
print(
'CATATAN: User akan perlu login manual. Jika email konfirmasi masih diperlukan,');
print(
'nonaktifkan verifikasi email di dashboard Supabase: Authentication > Email Templates > Disable Email Confirmation');
} catch (e) {
print('Error pada signUpDonatur: $e');
if (e.toString().contains('User already registered')) {
throw Exception(
'Email sudah terdaftar. Silakan gunakan email lain atau login dengan email tersebut.');
} else {
// Untuk error konfirmasi email, berikan instruksi yang jelas
if (e.toString().contains('Error sending confirmation mail')) {
print('===== PERHATIAN PENGEMBANG =====');
print(
'Error ini terjadi karena Supabase gagal mengirim email konfirmasi.');
print(
'Untuk mengatasi ini, nonaktifkan konfirmasi email di dashboard Supabase:');
print(
'1. Buka project Supabase > Authentication > Email Templates > Confirmation');
print('2. Matikan toggle "Enable email confirmations"');
print('==============================');
throw Exception(
'Gagal mengirim email konfirmasi. Mohon hubungi administrator.');
}
rethrow;
}
}
}
// Metode untuk mendapatkan user saat ini
Future<UserData?> getCurrentUser({bool skipCache = false}) async {
// Jika ada cache dan user masih terautentikasi, gunakan cache kecuali skipCache = true