Загрузка данных


package com.monika.orangesky

import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.unit.dp
import com.monika.orangesky.data.AppDatabase
import com.monika.orangesky.data.User
import kotlinx.coroutines.launch

@Composable
fun RegisterScreen(
    onRegistered: () -> Unit,
    onBack: () -> Unit,
    database: AppDatabase
) {
    var nickname by remember { mutableStateOf("") }
    var fullNickname by remember { mutableStateOf("") }
    var password by remember { mutableStateOf("") }
    val scope = rememberCoroutineScope()
    var errorMessage by remember { mutableStateOf("") }

    Column(modifier = Modifier.fillMaxSize().padding(24.dp), verticalArrangement = Arrangement.Center) {
        OutlinedTextField(value = nickname, onValueChange = { nickname = it }, label = { Text("Никнейм") }, modifier = Modifier.fillMaxWidth())
        Spacer(modifier = Modifier.height(12.dp))
        OutlinedTextField(value = fullNickname, onValueChange = { fullNickname = it }, label = { Text("Полное имя") }, modifier = Modifier.fillMaxWidth())
        Spacer(modifier = Modifier.height(12.dp))
        OutlinedTextField(value = password, onValueChange = { password = it }, label = { Text("Пароль") }, modifier = Modifier.fillMaxWidth(), visualTransformation = PasswordVisualTransformation())
        
        if (errorMessage.isNotEmpty()) Text(errorMessage, color = MaterialTheme.colorScheme.error)

        Button(onClick = {
            scope.launch {
                val existingUser = database.userDao().getUser(nickname)
                if (existingUser != null) {
                    errorMessage = "Этот никнейм уже занят"
                } else {
                    database.userDao().insertUser(User(nickname, fullNickname, password))
                    onRegistered()
                }
            }
        }, modifier = Modifier.fillMaxWidth().padding(top = 16.dp)) {
            Text("Зарегистрироваться")
        }
        TextButton(onClick = onBack, modifier = Modifier.fillMaxWidth()) {
            Text("Назад")
        }
    }
}