import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import kotlinx.coroutines.delay
@Composable
fun UserScreen(userId: Int, repository: UserRepository) {
var user by remember { mutableStateOf<User?>(null) }
var error by remember { mutableStateOf<String?>(null) }
// Re-runs whenever `userId` changes
LaunchedEffect(userId) {
try {
user = repository.fetchUser(userId)
} catch (e: Exception) {
error = e.message
}
}
when {
error != null -> Text("Error: $error")
user == null -> CircularProgressIndicator()
else -> Text("Hello ${user!!.name}")
}
}
interface UserRepository { suspend fun fetchUser(id: Int): User }
data class User(val name: String)
Create a free account and build your private vault. Share publicly whenever you want.