Overview
The AppUser data class represents a user in the EV Sum 2 application. It contains basic user information typically retrieved from Firebase Authentication.
Class Definition
data class AppUser(
val uid: String = "",
val email: String = "",
val displayName: String = ""
)
Properties
The unique identifier for the user, typically from Firebase Authentication
The user’s display name or full name
Usage Examples
Creating an AppUser instance
val user = AppUser(
uid = "abc123xyz",
email = "[email protected]",
displayName = "John Doe"
)
Creating from Firebase User
val firebaseUser = FirebaseAuth.getInstance().currentUser
val appUser = AppUser(
uid = firebaseUser?.uid ?: "",
email = firebaseUser?.email ?: "",
displayName = firebaseUser?.displayName ?: ""
)
Default instance
// Creates an empty user with all fields as empty strings
val emptyUser = AppUser()
Data Class Features
As a Kotlin data class, AppUser automatically provides:
- equals(): Compares two users based on their properties
- hashCode(): Generates hash code based on properties
- toString(): Returns a string representation of the user
- copy(): Creates a copy with optionally modified properties
- componentN(): Enables destructuring declarations
Copy with modifications
val user = AppUser(
uid = "abc123",
email = "[email protected]",
displayName = "John Doe"
)
// Update only the display name
val updatedUser = user.copy(displayName = "Jane Doe")
Destructuring
val user = AppUser(
uid = "abc123",
email = "[email protected]",
displayName = "John Doe"
)
val (uid, email, displayName) = user
println("User ID: $uid")
println("Email: $email")
println("Name: $displayName")
Integration with ViewModels
class AuthViewModel : ViewModel() {
private val _currentUser = MutableStateFlow<AppUser?>(null)
val currentUser: StateFlow<AppUser?> = _currentUser.asStateFlow()
fun loadUser(firebaseUser: FirebaseUser?) {
_currentUser.value = firebaseUser?.let {
AppUser(
uid = it.uid,
email = it.email ?: "",
displayName = it.displayName ?: ""
)
}
}
}
Validation
fun AppUser.isValid(): Boolean {
return uid.isNotBlank() && email.isNotBlank()
}
fun AppUser.hasDisplayName(): Boolean {
return displayName.isNotBlank()
}
// Usage
val user = AppUser(uid = "abc123", email = "[email protected]")
if (user.isValid()) {
// Proceed with user operations
}
Source Location
com.demodogo.ev_sum_2.domain.models.AppUser