TKK_Nisa_E32221364/lib/services/auth_service.dart

136 lines
3.6 KiB
Dart

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/foundation.dart';
class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
// Get current user
User? get currentUser => _auth.currentUser;
// Auth state changes stream
Stream<User?> get authStateChanges => _auth.authStateChanges();
// Sign in with email and password
Future<UserCredential?> signInWithEmailAndPassword({
required String email,
required String password,
}) async {
try {
UserCredential result = await _auth.signInWithEmailAndPassword(
email: email,
password: password,
);
return result;
} on FirebaseAuthException catch (e) {
if (kDebugMode) {
print('Firebase Auth Error: ${e.message}');
}
throw _handleAuthException(e);
} catch (e) {
if (kDebugMode) {
print('General Auth Error: $e');
}
throw 'Terjadi kesalahan saat login';
}
}
// Register with email and password
Future<UserCredential?> registerWithEmailAndPassword({
required String email,
required String password,
}) async {
try {
UserCredential result = await _auth.createUserWithEmailAndPassword(
email: email,
password: password,
);
return result;
} on FirebaseAuthException catch (e) {
if (kDebugMode) {
print('Firebase Auth Error: ${e.message}');
}
throw _handleAuthException(e);
} catch (e) {
if (kDebugMode) {
print('General Auth Error: $e');
}
throw 'Terjadi kesalahan saat mendaftar';
}
}
// Sign out
Future<void> signOut() async {
try {
await _auth.signOut();
} catch (e) {
if (kDebugMode) {
print('Sign out error: $e');
}
throw 'Terjadi kesalahan saat logout';
}
}
// Reset password
Future<void> sendPasswordResetEmail({required String email}) async {
try {
await _auth.sendPasswordResetEmail(email: email);
} on FirebaseAuthException catch (e) {
if (kDebugMode) {
print('Password reset error: ${e.message}');
}
throw _handleAuthException(e);
} catch (e) {
if (kDebugMode) {
print('General password reset error: $e');
}
throw 'Terjadi kesalahan saat mengirim email reset password';
}
}
// Update user profile
Future<void> updateUserProfile({
String? displayName,
String? photoURL,
}) async {
try {
await currentUser?.updateDisplayName(displayName);
if (photoURL != null) {
await currentUser?.updatePhotoURL(photoURL);
}
} catch (e) {
if (kDebugMode) {
print('Update profile error: $e');
}
throw 'Terjadi kesalahan saat update profil';
}
}
// Handle Firebase Auth exceptions
String _handleAuthException(FirebaseAuthException e) {
switch (e.code) {
case 'weak-password':
return 'Password terlalu lemah';
case 'email-already-in-use':
return 'Email sudah digunakan';
case 'invalid-email':
return 'Email tidak valid';
case 'user-not-found':
return 'User tidak ditemukan';
case 'wrong-password':
return 'Password salah';
case 'user-disabled':
return 'Akun telah dinonaktifkan';
case 'too-many-requests':
return 'Terlalu banyak percobaan login. Coba lagi nanti';
case 'operation-not-allowed':
return 'Operasi tidak diizinkan';
case 'invalid-credential':
return 'Kredensial tidak valid';
case 'network-request-failed':
return 'Koneksi internet bermasalah';
default:
return e.message ?? 'Terjadi kesalahan yang tidak diketahui';
}
}
}