mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-06-18 23:20:54 +00:00
add weird way of navigating to screens without having to pass navigation function paramter
This commit is contained in:
parent
c877e5e4bc
commit
85438ea33d
1 changed files with 20 additions and 0 deletions
|
@ -4,6 +4,7 @@ package helium314.keyboard.settings
|
||||||
import androidx.compose.animation.slideInHorizontally
|
import androidx.compose.animation.slideInHorizontally
|
||||||
import androidx.compose.animation.slideOutHorizontally
|
import androidx.compose.animation.slideOutHorizontally
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||||
import androidx.compose.ui.unit.LayoutDirection
|
import androidx.compose.ui.unit.LayoutDirection
|
||||||
import androidx.navigation.compose.NavHost
|
import androidx.navigation.compose.NavHost
|
||||||
|
@ -12,6 +13,11 @@ import androidx.navigation.compose.rememberNavController
|
||||||
import helium314.keyboard.settings.screens.AboutScreen
|
import helium314.keyboard.settings.screens.AboutScreen
|
||||||
import helium314.keyboard.settings.screens.MainSettingsScreen
|
import helium314.keyboard.settings.screens.MainSettingsScreen
|
||||||
import helium314.keyboard.settings.screens.TextCorrectionScreen
|
import helium314.keyboard.settings.screens.TextCorrectionScreen
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SettingsNavHost(
|
fun SettingsNavHost(
|
||||||
|
@ -20,10 +26,13 @@ fun SettingsNavHost(
|
||||||
) {
|
) {
|
||||||
val navController = rememberNavController()
|
val navController = rememberNavController()
|
||||||
val dir = if (LocalLayoutDirection.current == LayoutDirection.Ltr) 1 else -1
|
val dir = if (LocalLayoutDirection.current == LayoutDirection.Ltr) 1 else -1
|
||||||
|
val target = SettingsDestination.navTarget.collectAsState()
|
||||||
|
|
||||||
fun goBack() {
|
fun goBack() {
|
||||||
if (!navController.popBackStack()) onClickBack()
|
if (!navController.popBackStack()) onClickBack()
|
||||||
}
|
}
|
||||||
|
if (target.value != SettingsDestination.Settings)
|
||||||
|
navController.navigate(route = target.value)
|
||||||
|
|
||||||
NavHost(
|
NavHost(
|
||||||
navController = navController,
|
navController = navController,
|
||||||
|
@ -57,4 +66,15 @@ object SettingsDestination {
|
||||||
const val Settings = "settings"
|
const val Settings = "settings"
|
||||||
const val About = "about"
|
const val About = "about"
|
||||||
const val TextCorrection = "text_correction"
|
const val TextCorrection = "text_correction"
|
||||||
|
val navTarget = MutableStateFlow(Settings)
|
||||||
|
|
||||||
|
private val navScope = CoroutineScope(Dispatchers.Default)
|
||||||
|
fun navigateTo(target: String) {
|
||||||
|
if (navTarget.value == target) {
|
||||||
|
// triggers recompose twice, but that's ok as it's a rare event
|
||||||
|
navTarget.value = Settings
|
||||||
|
navScope.launch { delay(10); navTarget.value = target }
|
||||||
|
} else
|
||||||
|
navTarget.value = About
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue