From 6a5de42b8923e9191822d58f6b185e574f486aca Mon Sep 17 00:00:00 2001 From: lamtruong28 Date: Wed, 17 Jun 2026 02:29:21 +0700 Subject: [PATCH] [Fix] system theme initial, toggle theme first time --- .../app/torquevaultkmp/AppStorage.android.kt | 1 + .../kotlin/com/digitoolsolutions/app/torquevaultkmp/App.kt | 5 +++-- .../app/torquevaultkmp/screens/MainScreen.kt | 4 +++- .../digitoolsolutions/app/torquevaultkmp/AppStorage.ios.kt | 1 + 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/composeApp/src/androidMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/AppStorage.android.kt b/composeApp/src/androidMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/AppStorage.android.kt index 77a96f6..188b075 100644 --- a/composeApp/src/androidMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/AppStorage.android.kt +++ b/composeApp/src/androidMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/AppStorage.android.kt @@ -24,6 +24,7 @@ class AppStoragePlatform(context: Context) : AppStorage { @Suppress("UNCHECKED_CAST") override fun load(key: String, type: KClass): T? { + if (!prefs.contains(key)) return null return when (type) { String::class -> prefs.getString(key, null) as T? Int::class -> prefs.getInt(key, -1) as T? diff --git a/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/App.kt b/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/App.kt index bed8cc2..b971d61 100644 --- a/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/App.kt +++ b/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/App.kt @@ -10,8 +10,9 @@ import org.koin.compose.viewmodel.koinViewModel @Composable @Preview -fun App() { - val viewModel = koinViewModel() +fun App( + viewModel: AppViewModel = koinViewModel() +) { val savedTheme = viewModel.isDarkTheme.value val isDarkTheme = savedTheme ?: isSystemInDarkTheme() val isLoggedIn = viewModel.isLoggedIn() diff --git a/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/screens/MainScreen.kt b/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/screens/MainScreen.kt index d134007..4ceabdb 100644 --- a/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/screens/MainScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/screens/MainScreen.kt @@ -12,6 +12,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.navigation.NavType import androidx.navigation.compose.NavHost @@ -62,6 +63,7 @@ fun MainScreen( val navBackStackEntry by navController.currentBackStackEntryAsState() val currentDestination = navBackStackEntry?.destination val noNavbar = listOf(AuthDestination.route, CommunicationDestination.route) + val startRoute = rememberSaveable { if (isLoggedIn) HomeDestination.route else AuthDestination.route } val sessionExpired by viewModel.sessionExpired @@ -122,7 +124,7 @@ fun MainScreen( ) { innerPadding -> NavHost( navController = navController, - startDestination = if (isLoggedIn) HomeDestination.route else AuthDestination.route, + startDestination = startRoute, modifier = Modifier.padding(innerPadding).fillMaxSize() ) { composable(AuthDestination.route) { LoginScreen(navController) } diff --git a/composeApp/src/iosMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/AppStorage.ios.kt b/composeApp/src/iosMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/AppStorage.ios.kt index 419e78b..d45f62d 100644 --- a/composeApp/src/iosMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/AppStorage.ios.kt +++ b/composeApp/src/iosMain/kotlin/com/digitoolsolutions/app/torquevaultkmp/AppStorage.ios.kt @@ -25,6 +25,7 @@ class AppStoragePlatform : AppStorage { @Suppress("UNCHECKED_CAST") override fun load(key: String, type: KClass): T? { + if (defaults.objectForKey(key) == null) return null return when (type) { String::class -> defaults.stringForKey(key) as T? Int::class -> defaults.integerForKey(key).toInt() as T?