datastore actually working

This commit is contained in:
pedro 2025-02-19 15:59:51 +03:00
parent 51c0c32628
commit 6b1a4e5e96
2 changed files with 23 additions and 5 deletions

View File

@ -9,6 +9,7 @@ import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.datastore.core.DataStore import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.Preferences
@ -17,6 +18,7 @@ import androidx.datastore.preferences.core.intPreferencesKey
import androidx.datastore.preferences.core.stringPreferencesKey import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.preferencesDataStore import androidx.datastore.preferences.preferencesDataStore
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
@ -35,16 +37,21 @@ class MainActivity : ComponentActivity() {
setContent { setContent {
Nto_minipigsTheme { Nto_minipigsTheme {
val dataStore = remember { val dataStore = remember {
UserData(this) UserData(applicationContext)
} }
val navController = rememberNavController() val navController = rememberNavController()
val loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] val loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java]
val token by dataStore.token.collectAsStateWithLifecycle("")
Log.d("tokenn", token.toString())
NavHost( NavHost(
navController = navController, navController = navController,
startDestination = Login startDestination = Login
) { ) {
composable<Login> { LoginScreen( onNavigateToMain = { navController.navigate(route = Main)}, viewModel = loginViewModel ) } composable<Login> { LoginScreen( onNavigateToMain = { navController.navigate(route = Main)}, viewModel = loginViewModel, dataStore = dataStore ) }
composable<Main> { MainScreen() } composable<Main> { MainScreen() }
} }
} }
@ -59,7 +66,7 @@ class UserData(private val context: Context) {
preferences[tokenKey] preferences[tokenKey]
} }
suspend fun updateName(data:String) = suspend fun updateToken(data:String) =
context.dataStore.edit { settings -> context.dataStore.edit { settings ->
settings[tokenKey] = data settings[tokenKey] = data
} }

View File

@ -17,13 +17,19 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import com.example.nto_minipigs.ui.theme.Nto_minipigsTheme import com.example.nto_minipigs.ui.theme.Nto_minipigsTheme
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.datastore.core.DataStore
import com.example.nto_minipigs.LoginViewModel import com.example.nto_minipigs.LoginViewModel
import com.example.nto_minipigs.UserData
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
@Composable @Composable
fun LoginScreen( onNavigateToMain: () -> Unit, viewModel: LoginViewModel) { fun LoginScreen( onNavigateToMain: () -> Unit, viewModel: LoginViewModel, dataStore: UserData) {
Nto_minipigsTheme { Nto_minipigsTheme {
val cor = rememberCoroutineScope()
Surface { Surface {
Column( Column(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
@ -56,7 +62,12 @@ fun LoginScreen( onNavigateToMain: () -> Unit, viewModel: LoginViewModel) {
) )
Button( Button(
onClick = { viewModel.getData(login, onNavigateToMain) }, onClick = {
viewModel.getData(login, onNavigateToMain)
cor.launch {
dataStore.updateToken("yenis")
}
},
shape = RoundedCornerShape(12.dp), shape = RoundedCornerShape(12.dp),
) { ) {
Text(text = "Sign In", style = MaterialTheme.typography.bodyLarge) Text(text = "Sign In", style = MaterialTheme.typography.bodyLarge)