From 59d86c5012d7a98d2591f158b25fe3bd09504421 Mon Sep 17 00:00:00 2001 From: firekat Date: Thu, 19 Mar 2026 00:41:45 +0300 Subject: [PATCH 1/2] add checking auth state --- README.md | 94 +------------------ .../kotlin/com/example/testkmp/App.kt | 10 +- .../data/SupabaseAuthRepositoryImpl.kt | 8 ++ .../com/example/testkmp/di/SharedModule.kt | 3 + .../domain/repositories/AuthRepository.kt | 4 + .../usecases/auth/CheckAuthorizationState.kt | 15 +++ .../testkmp/presentation/AuthViewModel.kt | 17 ++++ .../presentation/screens/HomeScreen.kt | 23 ++++- .../presentation/screens/SignInScreen.kt | 19 ++++ .../presentation/screens/SignUpScreen.kt | 4 +- 10 files changed, 103 insertions(+), 94 deletions(-) create mode 100644 composeApp/src/commonMain/kotlin/com/example/testkmp/domain/usecases/auth/CheckAuthorizationState.kt diff --git a/README.md b/README.md index 8c23a86..1bc0de4 100644 --- a/README.md +++ b/README.md @@ -1,93 +1,9 @@
-

πŸ“‹ KMP Task Manager

-

- ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π·Π°Π΄Π°Ρ‡, построСнный Π½Π° Kotlin Multiplatform ΠΈ Compose Multiplatform. -

-

- Platform: iOS, Android, Desktop - Kotlin Version - Compose Version -

-
- App Preview +

Бтабилизация АутСнтификации

-## ✨ О ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ +## πŸ›  Π€ΠΈΡ‡ΠΈ -**Task Manager** β€” это дСмонстрационноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ возмоТности соврСмСнной Kotlin Multiplatform Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Оно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° **iOS**, **Android** ΠΈ **Desktop (macOS/Windows/Linux)** с использованиСм Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹. - -ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ списком Π·Π°Π΄Π°Ρ‡, сортируя ΠΈΡ… ΠΏΠΎ катСгориям, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ устройствами ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° - -## πŸ›  ВСхнологичСский стСк - -* **Π―Π·Ρ‹ΠΊ:** [Kotlin](https://kotlinlang.org/) Multiplatform -* **UI:** [Compose Multiplatform](https://www.jetbrains.com/compose-multiplatform/) ΠΎΡ‚ JetBrains -* **АрхитСктура:** Clean Architecture + MVVM -* **DI:** [Koin](https://insert-koin.io/) -* **Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…:** [PostgreSQL](https://www.postgresql.org/) Π½Π° [Supabase](https://supabase.com/) -* **ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ:** [Kotlin Coroutines](https://github.com/Kotlin/kotlinx.coroutines) + [Flow](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/) - -## πŸš€ Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ - -- [x] πŸ“ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ -- [x] βœ… ΠžΡ‚ΠΌΠ΅Ρ‚ΠΊΠ° ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ -- [x] πŸŒ— АвтоматичСская смСна Ρ‚Π΅ΠΌΡ‹ (свСтлая/тСмная) Π² зависимости ΠΎΡ‚ систСмы -- [x] πŸ“± Адаптивный интСрфСйс для всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ -- [x] πŸ’Ύ Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° сСрвСрС ΠΈ автоматичСскоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°Ρ… - -## πŸ“Έ Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Ρ‹ - -
- - - - - - - - - - - -
AndroidiOSDesktop
AndroidiOSDesktop (macOS)
-
- -## 🏁 Запуск ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° - -### ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования -- Android Studio (ΠΈΠ»ΠΈ IntelliJ IDEA) -- Xcode (для запуска Π½Π° iOS) -- JDK 17+ - -### Π¨Π°Π³ΠΈ для запуска - -1. **ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ:** - ```bash - git clone https://github.com/BigCapybara638/TaskManager.git - ``` -2. **ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚** Π² Android Studio. -3. **Для Android:** Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ `androidApp` ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Run. -4. **Для Desktop:** Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ `composeApp [jvm]` ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Run. -5. **Для iOS:** ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ `iosApp/iosApp.xcodeproj` Π² Xcode ΠΈ собСритС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ (ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ»Π°Π³ΠΈΠ½ KMM Π² Android Studio). - -## 🀝 Как внСсти Π²ΠΊΠ»Π°Π΄ - -Π’ΠΊΠ»Π°Π΄Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ! Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΈΠ΄Π΅ΠΈ ΠΈΠ»ΠΈ Π²Ρ‹ нашли Π±Π°Π³, создайтС [Issue](https://github.com/BigCapybara638/TaskManager/issues) ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Pull Request. - -1. Π€ΠΎΡ€ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ -2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ для Ρ„ΠΈΡ‡ΠΈ (`git checkout -b feature/amazing-feature`) -3. Π—Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΡŒΡ‚Π΅ измСнСния (`git commit -m 'Add some amazing feature'`) -4. Π—Π°ΠΏΡƒΡˆΡŒΡ‚Π΅ Π² Π²Π΅Ρ‚ΠΊΡƒ (`git push origin feature/amazing-feature`) -5. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Pull Request - -## πŸ“¬ ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ - -Павлов Π‘Π΅ΠΌΡ‘Π½ - sp2007pavlov@yandex.ru - -Бсылка Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚: [https://github.com/BigCapybara638/TaskManager](https://github.com/BigCapybara638/TaskManager) - ---- - -
- БдСлано с ❀️ и Kotlin Multiplatform. -
+* **ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ошибок Π² UI** +* **Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ статуса Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² ΠΎΡ„Ρ„Π»Π°ΠΉΠ½Π΅** +* **ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ состояния ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°** diff --git a/composeApp/src/commonMain/kotlin/com/example/testkmp/App.kt b/composeApp/src/commonMain/kotlin/com/example/testkmp/App.kt index e377c26..34f4d00 100644 --- a/composeApp/src/commonMain/kotlin/com/example/testkmp/App.kt +++ b/composeApp/src/commonMain/kotlin/com/example/testkmp/App.kt @@ -1,6 +1,7 @@ package com.example.testkmp import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier @@ -43,7 +44,11 @@ fun App(modifier: Modifier) { val authViewModel: AuthViewModel = koinViewModel() val navController = rememberNavController() - val sessionStatus by supabase.auth.sessionStatus.collectAsState() + val sessionStatus by authViewModel.startAuthState.collectAsState() + + LaunchedEffect(Unit) { + authViewModel.checkAuthState() + } val startDestination = when (sessionStatus) { is SessionStatus.Authenticated -> Home @@ -76,6 +81,9 @@ fun App(modifier: Modifier) { } composable { SignUpScreen( + onNavigateToHome = { + navController.navigate(Home) + }, onNavigateToSignIn = { navController.navigate(SignIn) } diff --git a/composeApp/src/commonMain/kotlin/com/example/testkmp/data/SupabaseAuthRepositoryImpl.kt b/composeApp/src/commonMain/kotlin/com/example/testkmp/data/SupabaseAuthRepositoryImpl.kt index 0930bb6..4bb333d 100644 --- a/composeApp/src/commonMain/kotlin/com/example/testkmp/data/SupabaseAuthRepositoryImpl.kt +++ b/composeApp/src/commonMain/kotlin/com/example/testkmp/data/SupabaseAuthRepositoryImpl.kt @@ -1,5 +1,6 @@ package com.example.testkmp.data +import androidx.compose.runtime.collectAsState import com.example.testkmp.domain.repositories.AuthRepository import io.github.jan.supabase.auth.auth import io.github.jan.supabase.auth.providers.builtin.Email @@ -7,12 +8,19 @@ import io.github.jan.supabase.auth.user.UserInfo import com.example.testkmp.domain.models.Result import io.github.jan.supabase.auth.exception.AuthErrorCode import io.github.jan.supabase.auth.exception.AuthRestException +import io.github.jan.supabase.auth.status.SessionStatus import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow class SupabaseAuthRepositoryImpl() : AuthRepository { private val auth = supabase.auth + + override suspend fun checkAuthorizationState(): SessionStatus { + return auth.sessionStatus.value + } + override suspend fun signUp( email: String, password: String, diff --git a/composeApp/src/commonMain/kotlin/com/example/testkmp/di/SharedModule.kt b/composeApp/src/commonMain/kotlin/com/example/testkmp/di/SharedModule.kt index 76293e2..25707b3 100644 --- a/composeApp/src/commonMain/kotlin/com/example/testkmp/di/SharedModule.kt +++ b/composeApp/src/commonMain/kotlin/com/example/testkmp/di/SharedModule.kt @@ -9,6 +9,7 @@ import com.example.testkmp.domain.usecases.AddCategoryUseCase import com.example.testkmp.domain.usecases.GetAllCategoriesUseCase import com.example.testkmp.domain.usecases.GetAllTasksUseCase import com.example.testkmp.domain.usecases.GetTasksInCategoryUseCase +import com.example.testkmp.domain.usecases.auth.CheckAuthorizationState import com.example.testkmp.domain.usecases.auth.SignInUseCase import com.example.testkmp.domain.usecases.auth.SignOutUseCase import com.example.testkmp.domain.usecases.auth.SignUpUseCase @@ -29,6 +30,8 @@ val sharedModule = module { factory { AddCategoryUseCase(get()) } + factory { CheckAuthorizationState(get()) } + factory { SignUpUseCase(get()) } factory { SignInUseCase(get()) } diff --git a/composeApp/src/commonMain/kotlin/com/example/testkmp/domain/repositories/AuthRepository.kt b/composeApp/src/commonMain/kotlin/com/example/testkmp/domain/repositories/AuthRepository.kt index 03bea2e..ab10058 100644 --- a/composeApp/src/commonMain/kotlin/com/example/testkmp/domain/repositories/AuthRepository.kt +++ b/composeApp/src/commonMain/kotlin/com/example/testkmp/domain/repositories/AuthRepository.kt @@ -2,9 +2,13 @@ package com.example.testkmp.domain.repositories import io.github.jan.supabase.auth.user.UserInfo import com.example.testkmp.domain.models.Result +import io.github.jan.supabase.auth.status.SessionStatus +import kotlinx.coroutines.flow.Flow interface AuthRepository { + suspend fun checkAuthorizationState() : SessionStatus + suspend fun signUp( email: String, password: String, diff --git a/composeApp/src/commonMain/kotlin/com/example/testkmp/domain/usecases/auth/CheckAuthorizationState.kt b/composeApp/src/commonMain/kotlin/com/example/testkmp/domain/usecases/auth/CheckAuthorizationState.kt new file mode 100644 index 0000000..ab27788 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/com/example/testkmp/domain/usecases/auth/CheckAuthorizationState.kt @@ -0,0 +1,15 @@ +package com.example.testkmp.domain.usecases.auth + +import com.example.testkmp.domain.repositories.AuthRepository +import io.github.jan.supabase.auth.status.SessionStatus +import kotlinx.coroutines.flow.Flow + +class CheckAuthorizationState( + private val authRepository: AuthRepository +) { + + suspend operator fun invoke() : SessionStatus { + return authRepository.checkAuthorizationState() + } + +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/AuthViewModel.kt b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/AuthViewModel.kt index f44b41e..1c62f1a 100644 --- a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/AuthViewModel.kt +++ b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/AuthViewModel.kt @@ -5,13 +5,16 @@ import androidx.lifecycle.viewModelScope import com.example.testkmp.domain.usecases.auth.SignUpUseCase import kotlinx.coroutines.launch import com.example.testkmp.domain.models.Result +import com.example.testkmp.domain.usecases.auth.CheckAuthorizationState import com.example.testkmp.domain.usecases.auth.SignInUseCase import com.example.testkmp.domain.usecases.auth.SignOutUseCase +import io.github.jan.supabase.auth.status.SessionStatus import io.github.jan.supabase.auth.user.UserInfo import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow class AuthViewModel( + private val checkAuthorizationState: CheckAuthorizationState, private val signUpUseCase: SignUpUseCase, private val signInUseCase: SignInUseCase, private val signOutUseCase: SignOutUseCase @@ -20,6 +23,20 @@ class AuthViewModel( private var _authState = MutableStateFlow>(Result.Loading) val authState: StateFlow> = _authState + private var _startAuthState = MutableStateFlow(SessionStatus.Initializing) + val startAuthState: StateFlow = _startAuthState + + fun checkAuthState() { + viewModelScope.launch { + try { + val result = checkAuthorizationState() + _startAuthState.value = result + } catch (e: Exception) { + println(e) + } + } + } + fun signUp(email: String, pass: String, username: String? = null) { viewModelScope.launch { val result = signUpUseCase(email, pass, username) diff --git a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/HomeScreen.kt b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/HomeScreen.kt index 373edb3..2dbd289 100644 --- a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/HomeScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/HomeScreen.kt @@ -3,6 +3,7 @@ package com.example.testkmp.presentation.screens import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize @@ -81,16 +82,32 @@ fun HomeScreen( is DataState.Error -> { Column( horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center, modifier = Modifier .fillMaxSize() .padding(bottom = 14.dp) ) { Text( - text = "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ", - textAlign = TextAlign.Center + text = "ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ", + fontSize = 24.sp, + modifier = Modifier + .padding(top = 18.dp, bottom = 6.dp) ) + Spacer( + modifier = Modifier + .fillMaxWidth(0.85F) + .height(2.dp) + .background(Color.Gray) + ) + Box( + modifier = Modifier.fillMaxSize() + ) { + Text( + text = "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ", + textAlign = TextAlign.Center + ) + } + } } diff --git a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/SignInScreen.kt b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/SignInScreen.kt index b5ec81e..98522cd 100644 --- a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/SignInScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/SignInScreen.kt @@ -29,6 +29,7 @@ import com.example.testkmp.SignUp import com.example.testkmp.TaskManagerTheme import com.example.testkmp.domain.models.Result import com.example.testkmp.presentation.AuthViewModel +import io.github.jan.supabase.auth.status.SessionStatus import org.koin.compose.viewmodel.koinViewModel @Preview(showBackground = true) @@ -41,6 +42,8 @@ fun SignInScreen( val viewModel: AuthViewModel = koinViewModel() val authState by viewModel.authState.collectAsState() + val startAuthState by viewModel.startAuthState.collectAsState() + Column( horizontalAlignment = Alignment.CenterHorizontally, @@ -74,6 +77,22 @@ fun SignInScreen( modifier = Modifier.fillMaxWidth(0.85F) ) + when(startAuthState) { + is SessionStatus.RefreshFailure -> { + Text("Ошибка Π²Ρ…ΠΎΠ΄Π° - $startAuthState") + } + is SessionStatus.Initializing -> { + Text("Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅...") + } + + is SessionStatus.Authenticated -> { + Text("УспСх") + } + is SessionStatus.NotAuthenticated -> { + Text("НСт Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ...") + } + } + Button( modifier = Modifier .fillMaxWidth(0.3F) diff --git a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/SignUpScreen.kt b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/SignUpScreen.kt index 138ecd3..e787ffe 100644 --- a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/SignUpScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/SignUpScreen.kt @@ -30,7 +30,8 @@ import org.koin.compose.viewmodel.koinViewModel @Preview(showBackground = true) @Composable fun SignUpScreen( - onNavigateToSignIn: () -> Unit + onNavigateToSignIn: () -> Unit, + onNavigateToHome: () -> Unit ) { TaskManagerTheme { Column( @@ -84,6 +85,7 @@ fun SignUpScreen( onClick = { if(login.isNotBlank() && pass.isNotBlank()) { viewModel.signUp(email, pass, login) + onNavigateToHome() } } ) { From cdbfff606689914680b6c0a100f3f1d8c7a61c5c Mon Sep 17 00:00:00 2001 From: firekat Date: Thu, 19 Mar 2026 09:40:00 +0300 Subject: [PATCH 2/2] update screens signUp and signIn --- .../example/testkmp/presentation/AuthViewModel.kt | 3 ++- .../testkmp/presentation/screens/HomeScreen.kt | 4 +++- .../testkmp/presentation/screens/SignInScreen.kt | 14 ++++++++++---- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/AuthViewModel.kt b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/AuthViewModel.kt index 1c62f1a..111b2bc 100644 --- a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/AuthViewModel.kt +++ b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/AuthViewModel.kt @@ -46,7 +46,7 @@ class AuthViewModel( is Result.Error -> {println(result.error)} is Result.Loading -> {println("loading")} } - + checkAuthState() } } @@ -59,6 +59,7 @@ class AuthViewModel( } catch (e: Exception) { _authState.value = Result.Error(e.message.toString()) } + checkAuthState() } } diff --git a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/HomeScreen.kt b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/HomeScreen.kt index 2dbd289..b60c98d 100644 --- a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/HomeScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/HomeScreen.kt @@ -100,7 +100,9 @@ fun HomeScreen( .background(Color.Gray) ) Box( - modifier = Modifier.fillMaxSize() + contentAlignment = Alignment.Center, + modifier = Modifier + .fillMaxSize() ) { Text( text = "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ", diff --git a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/SignInScreen.kt b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/SignInScreen.kt index 98522cd..4e296cd 100644 --- a/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/SignInScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/example/testkmp/presentation/screens/SignInScreen.kt @@ -20,6 +20,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -79,17 +80,22 @@ fun SignInScreen( when(startAuthState) { is SessionStatus.RefreshFailure -> { - Text("Ошибка Π²Ρ…ΠΎΠ΄Π° - $startAuthState") + Text( + text = "Ошибка Π²Ρ…ΠΎΠ΄Π° - $startAuthState", + color = Color.Red) } is SessionStatus.Initializing -> { - Text("Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅...") + } is SessionStatus.Authenticated -> { - Text("УспСх") + Text("УспСшно!") } is SessionStatus.NotAuthenticated -> { - Text("НСт Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ...") + Text( + text = "Ошибка: ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π»ΠΎΠ³ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ", + color = Color.Red + ) } }