androidGenerateComposeUI.response.jsonโข3.88 kB
{
"files": [
{
"path": "/app/src/main/kotlin/com/example/ui/UserProfileScreen.kt",
"content": "@Composable\nfun UserProfileScreen(\n viewModel: UserProfileViewModel = hiltViewModel(),\n onNavigateBack: () -> Unit = {}\n) {\n val uiState by viewModel.uiState.collectAsState()\n \n Scaffold(\n topBar = {\n TopAppBar(\n title = { Text(\"User Profile\") },\n navigationIcon = {\n IconButton(onClick = onNavigateBack) {\n Icon(Icons.Default.ArrowBack, \"Back\")\n }\n }\n )\n }\n ) { padding ->\n Column(\n modifier = Modifier\n .fillMaxSize()\n .padding(padding)\n .padding(16.dp),\n verticalArrangement = Arrangement.spacedBy(16.dp)\n ) {\n if (uiState.isLoading) {\n CircularProgressIndicator()\n } else {\n OutlinedTextField(\n value = uiState.userName,\n onValueChange = viewModel::onUserNameChanged,\n label = { Text(\"Name\") },\n modifier = Modifier.fillMaxWidth()\n )\n \n OutlinedTextField(\n value = uiState.email,\n onValueChange = viewModel::onEmailChanged,\n label = { Text(\"Email\") },\n modifier = Modifier.fillMaxWidth()\n )\n \n uiState.error?.let { error ->\n Text(\n text = error,\n color = MaterialTheme.colorScheme.error,\n style = MaterialTheme.typography.bodySmall\n )\n }\n \n Button(\n onClick = viewModel::onSaveClicked,\n modifier = Modifier.fillMaxWidth()\n ) {\n Text(\"Save Profile\")\n }\n }\n }\n }\n}",
"mode": 420
},
{
"path": "/app/src/main/kotlin/com/example/ui/UserProfileViewModel.kt",
"content": "@HiltViewModel\nclass UserProfileViewModel @Inject constructor(\n private val userRepository: UserRepository\n) : ViewModel() {\n \n private val _uiState = MutableStateFlow(UserProfileUiState())\n val uiState = _uiState.asStateFlow()\n \n fun onUserNameChanged(name: String) {\n _uiState.update { it.copy(userName = name) }\n }\n \n fun onEmailChanged(email: String) {\n _uiState.update { it.copy(email = email) }\n }\n \n fun onSaveClicked() {\n viewModelScope.launch {\n _uiState.update { it.copy(isLoading = true, error = null) }\n try {\n userRepository.saveProfile(\n name = uiState.value.userName,\n email = uiState.value.email\n )\n // Handle success\n } catch (e: Exception) {\n _uiState.update { it.copy(error = e.message) }\n } finally {\n _uiState.update { it.copy(isLoading = false) }\n }\n }\n }\n}\n\ndata class UserProfileUiState(\n val userName: String = \"\",\n val email: String = \"\",\n val isLoading: Boolean = false,\n val error: String? = null\n)",
"mode": 420
}
],
"instructions": "1. Add the generated files to your project\n2. Update your navigation graph to include the UserProfileScreen\n3. Ensure you have the required dependencies in your build.gradle.kts:\n - androidx.hilt:hilt-navigation-compose\n - androidx.lifecycle:lifecycle-viewmodel-compose\n4. Create the UserRepository interface and implementation"
}